时间:2022-03-21来源:www.pcxitongcheng.com作者:电脑系统城
单进程模式下,Nginx 启动后只有一个进程,Nginx 的所有工作都由这个进程负责。
优点:
单进程模式由于只有一个进程,因此可以很方便的利用 gdb
等工具进行调试。
缺点:
单进程模式不支持 Nginx 的平滑升级功能,任何的信号处理都可能造成服务中断;并且由于是单进程,进程挂掉后,在没有外部监控的情况下,无法重启服务。
不过后面 Nginx 已经将 Master-Worker 配置成默认的工作模式,所以并不需要担心上面的问题。
1 2 3 |
[root@localhost ~] # ps aux | grep nginx | grep -v grep root 38395 0.0 0.0 264704 7192 ? Ss Dec15 0:00 nginx: master process /usr/local/nginx/sbin/nginx root 3421689 0.0 0.0 294040 32680 ? S Dec24 0:00 nginx: worker process |
Nginx 启动后,会有一个 Master 进程和至少一个的 Worker 进程;Master 进程主要负责处理系统信号,加载配置,管理 Worker 进程等操作;而 Worker 进程则是负责处理具体的业务逻辑,也就是说,对外部来说,真正提供服务的是 Worker 进程。
优点: 稳定性高,只要还有 Worker 进程存活,就能够提供服务,并且一个 Worker 进程挂掉后,Master 进程会立即启动一个新的 Worker 进程,来保证 Worker 进程数量不变,降低服务中断的概率;同时 可以配合 Nginx 的 CPU 亲和,来充分利用多核 CPU 的优势,提升性能。
前两天博主在启动 Nginx 的时候,是没有问题的,但是在访问时就不行,当时通过查看端口号,发现端口是存在的,后面使用 ps
看进程,发现只有一个 master
进程(master
进程不会对外提供服务),最后通过查看 error.log
日志发现:
是因为使用的第三方模有问题,导致 Worker 进程并未启动。
处理方案的话有两种: 第一个就是将第三方模块在配置中进行移除,第二个就是对第三方模块进行修复。
这里博主 主要介绍:Nginx 配置文件中 /
的作用,别看这个一个小小的符号,他的作用可以说 关乎到系统是否可以正常提供服务。
Nginx 配置文件中 /
的作用,主要体现在 proxy_pass
的配置上。
准备工作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[root@PengYuYan ~] # yum -y install nginx [root@PengYuYan ~] # cat <<END > /etc/nginx/conf.d/Server_80.conf server { listen 80; server_name 127.0.0.1; root /usr/share/nginx/html ; index index.html; location /ZhangSan/ { proxy_pass http: //127 .0.0.1:8080; } location /PengYuYan/ { proxy_pass http: //127 .0.0.1:8080/; } } END [root@PengYuYan ~] # mkdir /usr/share/nginx/html/ZhangSan [root@PengYuYan ~] # echo "This is 127.0.0.1:80 ZhangSan" > /usr/share/nginx/html/ZhangSan/index.html [root@PengYuYan ~] # mkdir /usr/share/nginx/html/PengYuYan [root@PengYuYan ~] # echo "This is 127.0.0.1:80 PengYuYan" > /usr/share/nginx/html/PengYuYan/index.html |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[root@PengYuYan ~] # cat <<END > /etc/nginx/conf.d/Server_8080.conf server { listen 8080; server_name 127.0.0.1; root /www/html ; index index.html; location / { } location /ZhangSan/ { } location /PengYuYan/ { } } END [root@PengYuYan ~] # mkdir -p /www/html [root@PengYuYan ~] # echo "This is 127.0.0.1:8080 /" > /www/html/index.html [root@PengYuYan ~] # mkdir /www/html/ZhangSan [root@PengYuYan ~] # echo "This is 127.0.0.1:8080 ZhangSan" > /www/html/ZhangSan/index.html [root@PengYuYan ~] # mkdir /www/html/PengYuYan [root@PengYuYan ~] # echo "This is 127.0.0.1:8080 PengYuYan" > /www/html/PengYuYan/index.html |
下面的那些 location
,你们是不需要重新配置的,因为上面的配置和下面对应。
1 2 3 |
location /PengYuYan/ { proxy_pass http: //127 .0.0.1 /8080/ ; } |
验证:curl 127.0.0.1/PengYuYan/
这里博主来分解一下:
我们 curl 127.0.0.1/PengYuYan/ 中的 PengYuYan 其实就是我们 80 端口的 location 配置,并不是 8080 端口上的配置;
而我们正好又在 proxy_pass 代理的后面增加了个 /,就导致我们实际上访问的是 curl 127.0.0.1:8080/;
也就是说,我们要是如上配置,想要访问到 8080 端口的 PengYuYan,则需要 curl 127.0.0.1/PengYuYan/PengYuYan/。
1 2 3 |
location /PengYuYan/ { proxy_pass http: //127 .0.0.1 /8080/ ; } |
验证:
这个其实很好理解,因为我们没有在 proxy_pass
后面增加 /
,所以 Nginx 会自动将 location
的目录放到 proxy_pass
后面。
总结:
当我们的 proxy_pass
代理后面有 /
时,它并不会将 location
配置的目录加进去;
而当我们的代理后面没有加 /
时,Nginx 便会将 location
的目录放到 proxy_pass
后面。
1) 在带有目录的情况下加 /
(修改原来的 Server_80.conf
文件即可)
1 2 3 |
location /PengYuYan/ { proxy_pass http: //127 .0.0.1 /8080/ ; } |
验证:
2) 在带有目录的情况下不加 /
1 2 3 |
location /ZhangSan/ { proxy_pass http: //127 .0.0.1 /8080/ZhangSan ; } |
验证:curl 127.0.0.1/ZhangSan/
,在我们的配置上,实际上是访问的 curl 127.0.0.1:8080/ZhangSan/ZhangSan/
其实啊,不管是有目录和没目录,都和博主上面总结的一样。主要还是 Nginx 中的 /
在作怪。
以上就是Nginx工作模式及代理配置的使用细节的详细内容
2024-07-07
myeclipse怎么导入tomcat教程2024-07-07
myeclipse如何启动tomcat2024-07-07
myeclipse如何绑定tomcat上线了一个小的预约程序,配置通过Nginx进行访问入口,默认的日志是没有请求时间的,因此需要配置一下,将每一次的请求的访问响应时间记录出来,备查与优化使用....
2023-03-17