文章目录

  • 一、nginx介绍
  • 二、nginx应用场合
  • (1)HTTP服务器
  • (2)静态服务器
  • (3)正向代理
  • (4)反向代理
  • (5)负载均衡
  • (6)动静分离
  • 三、nginx的源码安装过程
  • 1.下载源码包
  • 2.安装依赖性-安装nginx-创建软连接-启动服务-关闭服务
  • 3.创建nginx服务启动脚本
  • 4.本实验---纯代码过程



一、nginx介绍

传统的 Web 服务器,每个客户端连接作为一个单独的进程或线程处理,需在切换任务时将 CPU 切换到新的任务并创建一个新的运行时上下文,消耗额外的内存和 CPU 时间,当并发请求增加时,服务器响应变慢,从而对性能产生负面影响。
Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx 最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是,Nginx 是免费的并可以商业化,配置使用也比较简单。
其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

二、nginx应用场合

(1)HTTP服务器

Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器,如果一个网站只是静态页面的话,那么就可以通过这种方式来实现部署。

(2)静态服务器

Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php 等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高 达 50,000 个并发连接数。

(3)正向代理

Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。 正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
简单一点:通过代理服务器来访问服务器的过程就叫正向代理
需要在客户端配置代理服务器进行指定网站访问

(4)反向代理

反向代理应该是Nginx使用最多的功能了,反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问。
我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。

nginx銝要o route to host nginx -h_java

(5)负载均衡

增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡
客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。

(6)动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速 度。降低原来单个服务器的压力。

nginx銝要o route to host nginx -h_服务器_02

三、nginx的源码安装过程

1.下载源码包

nginx官方源码 http://nginx.org

nginx銝要o route to host nginx -h_代理服务器_03


nginx銝要o route to host nginx -h_nginx_04

2.安装依赖性-安装nginx-创建软连接-启动服务-关闭服务

nginx銝要o route to host nginx -h_代理服务器_05


禁用调试


nginx銝要o route to host nginx -h_java_06

nginx銝要o route to host nginx -h_服务器_07


源码编译三部曲:进行完解压之后,condigure;make;make install


condigure命令后,生成Makefile文件,Makefile文件中记录后续的编译如何做,包括实验过程中加的参数


make:把C语言编译成二进制程序


编译出来的命令在objs/中,为nginx(占内存大),但是vim auto/cc/gcc中禁用调试后,生成的nginx(占内存小)


make install:把编译的程序安装到指定的程序中


这些进行完之后,我们的nginx已经安装成功,nginx的开启非常简单,直接nginx命令就可以开启,开启之后,我们可以通过查看80端口来检查是否开启,也可以ps进行查看进程


执行命令要在解压的第一级进行

nginx銝要o route to host nginx -h_nginx_08

3.创建nginx服务启动脚本

nginx銝要o route to host nginx -h_服务器_09

nginx銝要o route to host nginx -h_代理服务器_10

nginx銝要o route to host nginx -h_nginx_11

nginx銝要o route to host nginx -h_nginx_12

nginx銝要o route to host nginx -h_代理服务器_13

4.本实验—纯代码过程

安装依赖性
[root@server1 nginx-1.22.1]# yum install -y gcc pcre-devel openssl-devel

安装nginx
[root@server1 ~]# tar zxf nginx-1.22.1.tar.gz
[root@server1 ~]# cd nginx-1.22.1/
[root@server1 nginx-1.22.1]# vim auto/cc/gcc
172      #CFLAGS="$CFLAGS -g"                ##172行内容进行注释
[root@server1 nginx-1.22.1]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
[root@server1 nginx-1.22.1]# make
[root@server1 nginx-1.22.1]# make install

创建软连接,方便调用
[root@server1 ~]# ln -s /usr/local/nginx/sbin/nginx  /usr/local/sbin/

启动服务
[root@server1 ~]# nginx
[root@server1 nginx-1.22.1]# netstat -antlp
Active Internet connections (servers and established)
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      17940/nginx: master    ##可查询到包含nginx的信息

关闭服务
[root@server1 ~]# nginx -s stop

创建服务启动文件
[root@server1 ~]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target


[root@server1 ~]# systemctl daemon-reload
[root@server1 ~]# systemctl  enable nginx
[root@server1 ~]# systemctl  start nginx
[root@server1 ~]# systemctl  stop nginx