Nginx安装与基本使用

1.nginx简介

并发量:同一时刻 同时访问服务器的人数

1.1 什么是nginx?

nginx是一个高性能的http和反向代理服务器,特点是占有内存少,并发能力强。nginx专门为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,能支持大概50000个并发连接数。它支持热部署,可在7*24时间中不间断服务。

1.2 nginx的特点

(1)反向代理

正向代理:如果把局域网外的Internet看作一个巨大的资源库,那么局域网中的客户端要访问Internet,就需要通过代理服务器来访问,这种代理服务成为正向代理。这个代理服务器是针对于客户端的,需要配置。

反向代理:客户端对代理是无感知的,不需要配置代理服务器,只需要把请求发送到反向代理服务器,由反向代理服务器取选择目标服务器获取数据后再返回给客户端,此时代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器,隐藏了真实服务器的ip,对其进行了保护。

(2)负载均衡

当用户数量很多时,一个服务器可能不能应对那么多的请求,那就可以增加服务器的数量,将请求分发到各个服务器上,将负载分发到不同的服务器。它是通过反向代理服务器来进行负载均衡。

nginx分配服务器的策略: 

轮询:每个请求按时间顺序逐一分配到不同的服务器中,如果后端 服务器宕机,能自动剔除。
weight(权重):默认是1,越高代表分配的客户机越多。
ip_hash:每个请求按ip的hash结果分配,这样可以保证一个用户在一段时间内能访问固定的服务器,解决session共享的问题。在配置服务器列表时添加。
fair:按后端服务器的响应时间来分配,响应时间短的优先分配。在配置服务器列表时添加。

(3)动静分离

让静态资源和动态资源由不同的服务器来解析,加快解析速度,降低服务器的压力。

1.3nginx的安装

1.3.1在windows上安装nginx

1)下载

http://nginx.org/en/download.html 下载需要的版本。

2)解压运行

把压缩包解压后,双击文件夹里面的nginx.exe即可运行。如果80端口被占用,那么就先把80端口的进程关闭后再启动nginx.exe。启动完以后访问http://localhost,可以看到如下欢迎界面,说明已经安装成功

1.3.2在linux上安装nginx

1)安装gcc-c++环境:编译依赖c++环境,直接在命令窗口运行代码即可,下同。

yum install gcc-c++

2)安装PCRE环境

PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。

yum install -y pcre pcre-devel

3)安装zlib 环境

lib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。

yum install -y zlib zlib-devel

4)安装openssl

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。

yum install -y openssl openssl-devel

5)编译安装

将下载的nginx-1.8.0.tar.gz拷贝至linux服务器,解压之后, 执行如下命令

cd nginx-1.8.0
./configure 

开始编译和安装

make 
make install

安装成功后会在usr/local的目录下自动生成一个nginx的目录。

6)启动Nginx

安装完成之后,启动nginx,先切换到sbin目录

cd /usr/local/nginx/sbin/ 
./nginx

查看nginx进程

ps -aux | grep nginx

停止ninx

./nginx -s quit

重启Nginx,需要开启动后重启

./nginx -s reload

7)测试

设置linux的80端口允许外网访问。在window系统的浏览器中访问对应安装Nginx的linux的ip(如192.168.239.129),出现如下界面即安装成功。

 

8)安装多个nginx

当需要在一台服务器上同时安装多个nginx时,只需要在./configure的阶段会要求通过prefix设置安装路径,指定不同的prefix就可以安装多个nginx

安装第一个nginx

./configure --prefix=/usr/local/nginx1
make && make install

安装第二个nginx

./configure --prefix=/usr/local/nginx2
make && make install

安装更多方法按照这种方式即可,不过在启动前需要更改为不同的端口。

 

1.3.3配置文件的介绍

配置文件在位置:/usr/local/nginx/conf/nginx.conf。

配置文件有三部分组成分别是全局块、events块http块

全局块:从配置文件开始到events块之间的内容,主要设置一些影响nginx服务器整体运行的配置指令。
  如:worker_paocesses 1;表示ningx服务器并发处理的数量,值越大,并发处理量越大。
events块:主要影响nginx服务器与用户的网络连接
    如:worker_connections  1024;表示支持的最大连接数是1024
http块:是nginx服务器配置中最频繁的部分,又分为http全局块、server块。

1.4 nginx配置实例

(这里默认已经在linux上安装了nginx,所使用的端口也设置了对外开发)

1.4.1反向代理的配置实例

(1)实例1

实现效果:打开本地的浏览器,输入一个地址(如www.123.com),可以直接显示linux的tomcat的主页(即跳转到linux中tomcat的主页面)。

实现原理:在浏览器输入地址后,会先去本地的host文件查询,若没有找到的话就去请求nginx反向代理服务器,nginx服务器再去请求tomcat服务器,tomcat服务器返回数据给nginx服务器,nginx服务器再把数据返回给本地的浏览器。

1)在Linux中安装一个tomcat,端口号改为8081,然后启动;

2)在浏览器中访问linux的tomcat服务器。(地址:linux的ip:8081);

3)在window的host文件配置域名和ip的对应关系。打开C:\Windows\System32\drivers\etc\hosts文件,在尾部添加:

192.168.239.130 www.123.com
192.168.239.130是虚拟机的ip,现在在浏览器直接输入www.123.com:8081可以看到tomcat的主页面。还需进一步配置;

4)配置nginx反向代理。打开/usr/local/nginx/conf/nginx.conf文件,修改配置如下:

server {
        listen       80;
        #配置nginx的服务器ip
        server_name 192.168.239.130;
        
       location / {
            root   html;
            #配置转发的url
            proxy_pass http://127.0.0.1:8081;
            index  index.html index.htm;
        } 
  ......           

配置之后重启nginx,在浏览器输入www.123.com就直接显示了tomcat的主页。

   

 (2)实例2

实现效果:根据不同的访问路径跳转到不同的tomcat服务器。访问192.168.239.130:9001/edu/  直接跳转到127.0.0.1:8081;访问192.168.239.130:9001/vod/  直接跳转到127.0.0.1:8082。

1) 在linux上再安装一个tomcat,端口号改为8082(8005和8009这些也要修改),然后启动;

2)在两个tomcat中的webapps目录下分别写两个目录(edu和vod)和测试文件(1.txt和2.txt);

3)在nginx配置文件中添加配置(linux需开放9001端口):

 server {
        listen       9001;
        server_name  192.168.239.130;

        location ~ /edu/ {
            proxy_pass http://127.0.0.1:8081;
        }

        location ~ /vod/ {
            proxy_pass http://127.0.0.1:8082;
        }
    }

4)重启nginx服务器,测试运行。

在浏览器输入192.168.239.130/edu/1.txt,会显示之前编写的1.txt的内容;在浏览器输入192.168.239.130/vod/2.txt,会显示之前编写的2.txt的内容。

1.4.2负载均衡的配置实例

实现效果:浏览器访问192.168.239.130/edu/1.txt,动态的选择服务器1和2,达到负载均衡。(简单来说就是不断的刷新页面,一会访问的是服务器1,一会又访问的是服务器2)

1)安装两个tomcat,上面已经安装了,在此略;

2)在两个tomcat的webapps中都创建一个edu/1.txt的文件,文件内容随便,但是不能一样;

3)配置负载均衡的服务器列表:

http{
    .......
   upstream myserver {
       server 192.168.239.130:8081;
       server 192.168.239.130:8082;
    }
    server {
        listen       80;
        server_name  192.168.239.130;

        location / {
            root   html;
            proxy_pass http://myserver;
            index  index.html index.htm;
        }

重启nginx服务器,访问192.168.239.130/edu/1.txt,不断的刷新,会发现均衡的显示两个服务器中1.txt的内容。

1.4.3动静分离的配置实例

所谓动静分离,简单来说就是静态资源和动态资源分开,静态资源使用nginx进行代理访问,动态资源主要通过tomcat进行部署。这里nginx的主要作用就是通过配置可直接访问本地的资源(本地静态项目)。

实现效果:在浏览器访问192.168.239.130/test/2.html,不使用tomcat服务器,使用nginx服务器可以直接显示这个静态页面。

1)在linux的/usr/local目录下先创建目录html及子目录test,在子目录下新建2.html文件,内容自拟;

2)在nginxd的配置文件中配置:

 server {
        listen       80;
        server_name  192.168.239.130;
     #配置项目名,这里是test
        location /test/ {
            root   /usr/local/html;#资源的路径,
            index  index.html index.htm;
        }

3)重启nginx服务器,在浏览器输入192.168.239.130/test/2.html就可以看到2.html页面。

上述的location配置中,可直接代理到本地文件夹html下,那么就可以通过访问/test来访问其目录下的所有文件。这种配置中,通过root指定资源的路径,路径尾部无"/",这种方式只能访问到test目录下的所有文件,而test目录也必须真实存在。还有其他方式的配置,详见nginx反向代理之路径替换

1.4.4高可用配置

实现效果:配置两台nginx服务器,一台作为主服务器,另一台作为备份服务器,当主服务器宕机之后备份服务器会替代主服务器继续工作。

所需工具:keepalived ,虚拟ip。

1)需要两台服务器,一般就实现两个linux系统即可;

2)在这两台服务器中都安装nginx服务器;

3) 在这两台服务器中都安装keepalived,安装命令如下:

yum install keepalived -y

测试是否安装成功:

rpm -q -a keepalived

显示keepalived-1.2.13-5.el6_6.i686说明已经安装成功了。其配置文件位置是/etc/keepalived/keepalived.conf。

4)配置主服务器(备份服务器同,只需改粉色的地方,详见配置中的注释说明),修改keepalived的配置文件(/etc/keepalived/keepalived.conf),将其内容替换如下:

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.17.129
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/usr/local/nginx/nginx_check.sh" #检测脚本的存放位置
interval 2 #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
state BACKUP # 备份服务器需将 MASTER 改为 BACKUP 
interface ens33 //网卡,网卡必须正确
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1

authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 // VRRP H 虚拟地址
} }

5)在/usr/local/nginx目录下添加检测脚本nginx_check.sh,主从服务器的检查脚本是一样的:

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi    

6)测试。.

先启动nginx服务器,再启动keepalived:

service keepalived start
在浏览器地址栏输入 虚拟 ip 地址 192.168.17.50 ,可以访问到主服务器的nginx欢迎页面;停掉主服务器,再访问192.168.17.50,同样可以访问备份服务器的nginx欢迎页面。
关闭keepalived:
service keepalived stop

配置文件解释:global_defs { } 表示全局的配置,vrrp_script chk_http_port 配置检测的脚本,vrrp_instance VI_1 配置虚拟ip。

1.5nginx工作原理

(1)nginx中有master和worker,master是管理者,负责分发任务,worker有多个,是做事的。每个worker是一个独立的进程,不会导致服务中断。worker 数和服务器的 cpu 数相等是最为适宜的。

(2)worker工作方式:当客户端发送一个请求给nginx时,master接收到请求,然后告诉worker有任务了,那么很多的worker就采取抢夺的方式获取任务,再进行反向代理进行对应的操作。

(3)连接数 (worker_connection):发送请求,占用了 woker 的2 或者 4 个连接数。

(4)nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 (worker_processes)1024,支持的最大并发数是多少?
   普通的静态访问最大并发数是: worker_connections * worker_processes /2;
   而如果是 HTTP 作 为反向代理来说,最大并发数量是 worker_connections *worker_processes/4。 

1.6nginx实现动静分离和反向代理案例

描述:现有两个项目,一个是前端的,一个是后端的,且接口均已写好,现需利用nginx的动静分离和反向代理来运行项目。

第一步:下载解压一个nginx,并带有启动与退出的快捷方式,没有也不影响。

第二步:打开nginx的配置文件nginx-1.17.6\conf\nginx.conf,进行如下配置:

listen       8099; 
server_name  localhost;
location / { root C:/Files/Works; index index.html index.htm; } location ~^/test/ { proxy_pass http://127.0.0.01:8090; }

  其中红色部分为添加的。

  listen表示nginx要监听的端口。

  server_name表示nginx服务器的名字,远程的可使用ip地址。

  root里面配置前端项目的路径(到项目的上一级即可)。

  test为后端的项目名称,127.0.0.01:8090表示的是后台的ip地址+端口号。

第三步:启动nginx,到浏览器输入localhost:8099/html/login.html,即可访问到前端的登录页面。这里假设前端项目名是html。

第四步:启动后端的服务器,在刚刚的登录页面进行正常的登录,即可登录成功。

1.7多server配置

当需要使用一个nginx来代理多个项目时,可以使用多server方式,一个端口对应一个项目,通过不同的端口来访问对应的项目,示例如下:

    server {
        listen       9001;
        server_name  localhost;
         location / {
            root   E:/project/eclipse/cat-movie;
            index  index.html index.htm;
        }
         location ~^/api/ {         
            proxy_pass http://127.0.0.01:8005;
        }
     }

     server {
        listen       9002;
        server_name  localhost;
         location / {
            root   E:/project/eclipse/bookshop;
            index  index.html index.htm;
        }
         location ~^/api/ {         
            proxy_pass http://127.0.0.01:8005;
        }
     }

上面的配置就是一个nginx代理多个项目,且代理到了后台。9001端口对应cat-movie项目,9002端口对应bookshop项目。

如果是代理同一个后台,那么可以配置节点的方式,更为简单,上面示例修改如下:

    upstream pro{
        server 127.0.0.01:8005;
    }
    server {
        listen       9001;
        server_name  localhost;
         location / {
            root   E:/project/eclipse/cat-movie;
            index  index.html index.htm;
        }
         location ~^/api/ {         
            proxy_pass http://pro;
        }
     }
     
     server {
        listen       9002;
        server_name  localhost;
         location / {
            root   E:/project/eclipse/bookshop;
            index  index.html index.htm;
        }
         location ~^/api/ {         
            proxy_pass http://pro;
        }
     }

上述的配置的单节点,若配置多节点,在upstream中再添加服务即可,上面已经介绍,在此略。

2.Windows上搭建Nginx+Tomcat集群

2.1安装tomcat

第一步:在一台电脑上安装两个tomcat

需要在一台电脑模拟:在E盘解压两个tomcat,分别命名为tomcat1,tomcat2.

第二步:依次打开两个tomcat的配置文件server.xml,修改端口号,端口号不能一样

第三步:将项目分别发布到两个tomcat中。

2.2配置nginx 

nginx代理tomcat集群配置。打开nginx/conf/nginx.conf文件,如下配置:

 注意配置的时候分号不要忘了.

打开任务管理器,关闭这个进程,然后重新启动;或者在cmd中切换到rginx目录,输入nginx -s reload来重启。关闭使用nginx -s quit,启动使用nginx。重启之后就可以把tomcat启动起来,启动方式是在tomcat目录中进入bin目录,双击startup.bat启动。都启动之后就可以直接在浏览器输入localhost,nginx就可以管理这两个服务器,多刷新几次,会发现两个服务器在相互切换,从而实现负载均衡。可以在的后面加weight来修改权重,默认都是1。如server localhost:8081 weight 2。

2.3设置Tomcat集群的session共享

第一种方法:同一个用户进来以后只同一个服务器上进行操作。

打开nginx.conf,在里面加ip_hash。

第二种方法:session共享 

一种是使用tomcat广播机制完成session的共享(不推荐),修改两个tomcat中的server.xml,把下面的注释去掉即可:

 在\webapps\ROOT\WEB-INF\web.xml中添加配置,两个都需要改:

<distributable/>

配置之后,打开index.jsp,可以在tomcat1的index.jsp中获取session的id,存到session中,那么tomcat2的index.jsp就可以获取到这个session中的内容,从而实现session共享。需要注意,在index.jsp中session默认是关闭的,需要手动开启。当在浏览器中刷新时session不变说明设置成功。

一种使用redis服务器的方式完成session的共享(推荐),这种方式需要把搭建服务器,在这里暂不介绍。

3.Linux上搭建Nginx+Tomcat集群

3.1安装tomcat

第一步:在一台电脑上安装两个tomcat

需要在一台电脑模拟:在磁盘中新建一个目录,解压两个tomcat,分别命名为tomcat1,tomcat2,

第二步:依次打开两个tomcat的配置文件server.xml,修改端口号如下,端口号不能一样:

 

 

第三步:把修改后的端口添加到防火墙中,这里指8081。

查看tomcat是否关闭

ps -ef|grep java

杀死Tomcat进程

kill -9 进程号

其他的步骤和windows上集群搭建步骤一样。

4.不显示nginx版本号

对于不同版本的nginx来说,有的版本有漏洞,如果在访问时显示了版本号,就容易被攻击。默认是显示版本号的,若不显示则操作如下:

1)打开nginx的配置文件conf/nginx.conf,在http里加

server_tokens off; 

如图:

 2)打开conf/fastcgi.conf文件,找到SERVER_SOFTWARE,修改其不显示版本号

修改前

fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

修改后

fastcgi_param  SERVER_SOFTWARE    nginx;

然后重启,再次测试,对于404或405页面也就不会显示版本号信息了。

5.携带请求头信息

当使用nginx代理时,后台需要获取真实的客户端ip时,需在转发时将请求头同时转给后台服务,否则获取的ip一直是127.0.0.1。

配置方式就是在location中配置如下即可:

        location /api {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:8080;
        }

上述把主机名、ip等信息都设置到请求头中,这些信息将会给到要转发的服务器。

除了"proxy_set_header"外,还有一种是添加请求头(add_header),这种配置是将添加的请求头返回给浏览器,在浏览器的响应头中可以看到。

例如下图的配置

为了给浏览器返回响应头,就需要设置"add_header";为了给服务器传递源请求的信息,就需要设置"proxy_set_header".

posted @ 2019-09-02 19:27  钟小嘿  阅读(592)  评论(0编辑  收藏  举报