不容错过的Nginx配置详解,一文带你搞懂Nginx

2022-12-27 0 254

1 基本原理

1.1 Nginx概要

Nginx是两个高操控性的HTTP和逆向全权伺服器,特征是挤占缓存少,mammalian潜能强,实际上Nginx的mammalian潜能的确在同类型的页面伺服器中整体表现好。Nginx专门针对操控性强化而开发,操控性是其最重要的权衡,同时实现上十分著重工作效率,能抵挡高阻抗的挑战,有调查报告说明能全力支持高达50000个mammalian通话量。

1.2 萨德基全权

须要顾客自己在应用程序实用性全权伺服器门牌号。

比如:在内地出访www.google.com,他们须要两个全权伺服器,他们透过全权伺服器去出访Google,那个操作过程是萨德基全权。

1.3 逆向全权

逆向全权,应用程序对全权是无交互的,即使应用程序不须要任何人实用性就能出访,他们只须要将允诺发送至逆向

1.4 阻抗平衡

一般而言伺服器解决不了,他们减少伺服器的数目,接着将允诺递送到各伺服器上,将原本允诺分散到一般而言伺服器上的情形改成将允诺递送到数个伺服器上,将阻抗递送到相同的伺服器,也是他们说的阻抗平衡。

1.5 回音分立

为的是大力推进网站的导出速率,能把静态页面和静态页面由相同的伺服器来导出,大力推进导出速率。减少原本一般而言伺服器的阻力。

2 常用指示

步入到上面的产品目录,接着采用指示

cd /usr/local/nginx/sbin

2.1 查阅Nginx正式版

./nginx -v

2.2 开启Nginx

./nginx

2.3 停用Nginx

./nginx -s stop

2.4 重新加载Nginx

./nginx -s reload

2.5 重启Nginx

./nginx -s reopen

2.6 优雅停止Nginx

./nginx -s quit

2.7 测试实用性文件是否正确

./nginx -t

3 实用性文件

实用性文件所在位置:

/usr/local/nginx/conf/nginx.conf

3.1 实用性文件组成

由全局块+events块+http块组成

3.2 全局块

从实用性文件开始到events之间的内容,主要会设置一些影响Nginx伺服器整体运行的实用性指令,主要包括实用性运行Nginx伺服器的用户(组)、允许生成的worker process数,进程pid存放路径、日志存放路径和类型以及实用性文件的引入等。

worker_processes 1; #那个是Nginx伺服器mammalian处理服务的关键实用性,worker_processes值越大,能全力支持的mammalian处理量越多,但是会受到硬件、软件等设备的制约。

3.3 events块

events块设计的指令主要影响Nginx伺服器与用户的网络连接,常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同时接收数个网络连接,选取哪种事件驱动模型来处理连接允诺,每个work process能同时全力支持的最大通话量等。上面的例子表示每个work process全力支持的最大通话量为1024。这部分实用性对Nginx的操控性影响较大,在实际中应该灵活实用性。

events { worker_connections 1024; }

3.4 http块

Nginx伺服器实用性中最频繁的部分,全权、缓存和日志定义等绝大多数功能和第三方模块的实用性都在这里,http块又包括http全局块和server块。

3.4.1 http全局块

http全局块实用性的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接允诺数上限等。

3.4.2 server块

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为的是节省互联网伺服器硬件成本。

每个http块能包括数个server块,而每个server块就相当于两个虚拟主机。

每个server块也能分为全局server块,以及能同时包含数个location块。

3.4.2.1 全局server块

最常见的实用性时本虚拟主机的监听实用性和本虚拟主机的名称或IP实用性。

3.4.2.2 location块

两个server块能配置数个location块。

这块的主要作用是基于Nginx伺服器接收到的允诺字符串(比如server_name/uri-string),对虚拟主机名称(也能是IP别名)之外的字符串(比如前面的/uri-string)进行匹配,对特定的允诺进行处理。门牌号定向、数据缓存和应答控制等功能,还有许多第三方模块的实用性也在这里进行。

4 实用性实例

4.1 逆向全权

4.1.1 实例一

4.1.1.1 目标

出访http://ip,出访到的是Tomcat的主页面http://ip:8080。

4.1.1.2 环境

Nginx+JDK8+Tomcat

4.1.1.3 实用性文件

worker_processes 1; events{worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on;keepalive_timeout 65; server { listen 80; #server_name localhost; server_name 192.168.71.167; location / { root html; #添加上面的一句话 proxy_pass http://127.0.0.1:8080; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }

4.1.1.4 重新加载Nginx实用性文件

/usr/local/nginx/sbin/nginx -s reload

4.1.1.5 测试

出访:http://192.168.71.167/,看到的是Tomcat的首页。

4.1.2 实例二

4.1.2.1 目标

根据出访的路径跳转到相同的服务器中去。

出访http://ip:9001/edu 直接跳到http://127.0.0.1:8080/edu

出访http://ip:9001/vod 直接跳到http://127.0.0.1:9090/vod

4.1.2.2 环境

Nginx+JDK8+实用性两个Tomcat,Tomcat的实用性不再讲述。

4.1.2.3 实用性文件

worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; #实例一的实用性 server { listen 80; #server_name localhost; server_name 192.168.71.167; location / { root html; #添加上面的一句话 proxy_pass http://127.0.0.1:8080; index index.html index.htm; } error_page 500 502 503 504/50x.html;location = /50x.html { root html; } } #实例二的实用性 server { listen 9001; server_name 192.168.71.167; location ~/edu/ { proxy_pass http://127.0.0.1:8080; } location ~/vod/ { proxy_passhttp://127.0.0.1:9090; } } }

4.1.2.4 重新加载Nginx实用性文件

/usr/local/nginx/sbin/nginx -s reload

4.1.2.5 测试

出访

http://192.168.71.167:9001/edu/a.html跳到了

http://127.0.0.1:8080/edu/a.html页面。

出访

http://192.168.71.167:9001/vod/a.html跳到了

http://127.0.0.1:9090/vod/a.html页面。

4.1.3 proxy_set_header

假如Nginx全权伺服器Server的实用性为:192.168.71.167:9001,跳到:127.0.0.1:8080,出访者的IP为:192.168.71.200:20604。

4.1.3.1 Host

proxy_set_header Host $host:$server_port; # Host的值为192.168.71.167:9001

4.1.3.2 X-Real-IP

proxy_set_header X-Real-IP $remote_addr; # X-Real-IP的值为:192.168.71.200

4.1.3.3 X-Real-PORT

proxy_set_header X-Real-PORT $remote_port; # X-Real-PORT的值为:20604

4.1.3.4 X-Forwarded-For

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # X-Forwarded-For的值为:192.168.71.200

4.2 阻抗平衡

4.2.1 目标

透过出访

http://192.168.71.167/edu/a.html,同时实现阻抗平衡的效果,平均分摊到8080和8081端口中。

4.2.2 环境

Nginx+JDK8+2台Tomcat,一台8080,一台8081。

4.2.3 实用性文件

worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstreammyserver{#ip_hash; server 192.168.71.167:8080 weight=1; server 192.168.71.167:8081 weight=1; } server { listen 80; #server_name localhost; server_name 192.168.71.167; location / { root html; proxy_passhttp://myserver;proxy_connect_timeout 10; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location= /50x.html {root html; } } }

4.2.4 测试

出访:

http://192.168.71.167/edu/a.html,8080和8081交替出访。

4.2.5 策略

1 轮询(默认)

每个允诺按时间顺序逐一分配到相同的后端伺服器,如果后端伺服器down掉,能自动剔除。

2 weight

weight代表权重,默认为1,权重越高被分配的应用程序越多。

指定轮询几率,weight和出访比率成正比,用于后端伺服器操控性不均的情形。

3 ip_hash

每个允诺按出访IP的hash结果分配,这样每个访客固定出访两个后端伺服器,能解决session的问题,示比如下:

upstream myserver{ ip_hash; server 192.168.71.167:8080 weight=1; server 192.168.71.167:8081 weight=1; }

4 fair(第三方)

按后端伺服器的响应时间来分配允诺,响应时间短的优先分配。

upstream myserver{ fair; server 192.168.71.167:8080 weight=1; server 192.168.71.167:8081 weight=1; }

4.3 回音分立

4.3.1 准备工作

mkdir /data cd /data mkdir www #在www文件夹里放个a.html mkdir image #在image文件夹里放个1.jpg

4.3.2 实用性文件

worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name 192.168.71.167; location /www/ { root /data/; index index.html index.htm; } location /image/ { root /data/; autoindex on; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }

4.3.3 测试

出访图片:

http://192.168.71.167/image/1.jpg

出访页面:

http://192.168.71.167/www/a.html

出访产品目录:

http://192.168.71.167/image/(即使设置了autoindex on;)

4.4 高可用集群

4.4.1 环境准备

两台机器,每台机器都装有keepalived+Nginx+Tomcat。

4.4.2 安装keepalived

yum -y install keepalived #检查是否安装 rpm -q -a keepalived #安装的实用性文件位置 /etc/keepalived/keepalived.conf #开启和停用 systemctl start keepalived systemctl stop keepalived

4.4.3 完成高可用实用性

主备keepalived伺服器中只有master一台机器会出现VIP门牌号,否则会出现脑裂问题。

4.4.3.1 主keepalived的实用性

global_defs { notification_email { [email protected] [email protected] [email protected] } notification_email_from [email protected] smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id 192.168.71.167 } vrrp_script nginx_check { script “/usr/local/src/nginx_check.sh” #(每秒检查一次) interval 1 weight -30 } vrrp_instance VI_1 { state MASTER interface ens33 #虚拟路由ID,小于255,最终用于构成虚拟MAC门牌号,必须与backup一致 virtual_router_id 51 #优先级,0-254 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.71.100 } track_script { nginx_check } }

4.3.3.2 备keepalived的实用性

global_defs { notification_email { [email protected] [email protected] [email protected] } notification_email_from [email protected] smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id 192.168.71.168 } vrrp_script nginx_check { script “/usr/local/src/nginx_check.sh” #(每秒检查一次) interval 1 weight 2 } vrrp_instance VI_1 { state backup interface ens33 #虚拟路由ID,小于255,最终用于构成虚拟MAC门牌号,必须与backup一致 virtual_router_id 51 #优先级,0-254 priority 80 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.71.100 } track_script { nginx_check } }

4.3.3.3 chk_nginx.sh脚本

#!/bin/bash A=`ps -C nginx –no-header |wc -l` if [ $A-eq 0 ];then #发现停止后,自动开启 /usr/local/nginx/sbin/nginx sleep 2 #重启不成功,则kill掉keepalived if[ `ps -C nginx –no-header |wc -l` -eq 0 ];then systemctl stop keepalived fi fi

【提示】脚本要加+x的执行权限:chmod +x chk_nginx.sh

4.4.4 Nginx里实用性

在Nginx里把虚拟IP实用性进去即可。

五 原理介绍

5.1 master&worker

两个Nginx是由两个master进程和数个worker进程组成的。

5.2 worker如何工作的

应用程序发送允诺到Master,接着给worker,再由这些work争抢处理那个允诺。

5.3 两个master数个worker的好处

1 能采用nginx -s reload进行热部署方式;

2 每个worker是独立的进程,如果有其中的两个worker出现了问题,其他worker独立的继续进行争抢,同时实现允诺的操作过程,不会造成服务的中断;

5.4 设置多少个worker合适

Nginx和Redis类似,都采用了io多路复用机制。每个worker进程都能把CPU发挥到极致,一般来说worker数和伺服器的CPU数相等是最为适宜的。

# 如4个CPU worker_processes 4;

5.5 worker_connection通话量

5.5.1 允诺挤占的通话量

发送允诺:出访静态资源挤占2个连接,逆向全权挤占4个连接。

5.5.2 最大mammalian

出访静态资源:最大通话量=worker_processes*worker_connections/2 逆向全权:最大通话量=worker_processes*worker_connections/4

总结

这篇文章是我从事Java服务端合作开发多年的经验和总结,都是亲自执行过并且实用性成功的,如果有问题,能随时关注私信我,大家相互学习,也希望本篇关于Nginx的总结能够帮助大家运用在实际的工作当中去,码字不易,希望大家多多关注我,后面会有更多的干活输出,感谢全力支持。

【温馨提示】

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务