Nginx工作模式及代理配置的使用细节


Posted in Servers onMarch 21, 2022

一、Nginx 的工作模式

1.单进程模式

单进程模式下,Nginx 启动后只有一个进程,Nginx 的所有工作都由这个进程负责。

Nginx工作模式及代理配置的使用细节

优点:

单进程模式由于只有一个进程,因此可以很方便的利用 gdb 等工具进行调试。

缺点:

单进程模式不支持 Nginx 的平滑升级功能,任何的信号处理都可能造成服务中断;并且由于是单进程,进程挂掉后,在没有外部监控的情况下,无法重启服务。

不过后面 Nginx 已经将 Master-Worker 配置成默认的工作模式,所以并不需要担心上面的问题。

[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

2.Master-Worker 模式

Nginx 启动后,会有一个 Master 进程和至少一个的 Worker 进程;Master 进程主要负责处理系统信号,加载配置,管理 Worker 进程等操作;而 Worker 进程则是负责处理具体的业务逻辑,也就是说,对外部来说,真正提供服务的是 Worker 进程。

Nginx工作模式及代理配置的使用细节

优点: 稳定性高,只要还有 Worker 进程存活,就能够提供服务,并且一个 Worker 进程挂掉后,Master 进程会立即启动一个新的 Worker 进程,来保证 Worker 进程数量不变,降低服务中断的概率;同时 可以配合 Nginx 的 CPU 亲和,来充分利用多核 CPU 的优势,提升性能。

3.问题处理

前两天博主在启动 Nginx 的时候,是没有问题的,但是在访问时就不行,当时通过查看端口号,发现端口是存在的,后面使用 ps 看进程,发现只有一个 master 进程(master 进程不会对外提供服务),最后通过查看 error.log 日志发现:

是因为使用的第三方模有问题,导致 Worker 进程并未启动。

处理方案的话有两种: 第一个就是将第三方模块在配置中进行移除,第二个就是对第三方模块进行修复。

二、Nginx 代理配置

这里博主 主要介绍:Nginx 配置文件中 / 的作用,别看这个一个小小的符号,他的作用可以说 关乎到系统是否可以正常提供服务。

Nginx 配置文件中 / 的作用,主要体现在 proxy_pass 的配置上。

准备工作:

[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
[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.带 /

location /PengYuYan/ {
    proxy_pass http://127.0.0.1/8080/;
}

验证:curl 127.0.0.1/PengYuYan/

Nginx工作模式及代理配置的使用细节

这里博主来分解一下:

我们 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/。

2.不带 /

location /PengYuYan/ {
    proxy_pass http://127.0.0.1/8080/;
}

验证:

Nginx工作模式及代理配置的使用细节

这个其实很好理解,因为我们没有在 proxy_pass 后面增加 /,所以 Nginx 会自动将 location 的目录放到 proxy_pass 后面。

总结:

当我们的 proxy_pass 代理后面有 / 时,它并不会将 location 配置的目录加进去;

而当我们的代理后面没有加 / 时,Nginx 便会将 location 的目录放到 proxy_pass 后面。

1) 在带有目录的情况下加 /(修改原来的 Server_80.conf 文件即可)

location /PengYuYan/ {
    proxy_pass http://127.0.0.1/8080/;
}

验证:

Nginx工作模式及代理配置的使用细节

2) 在带有目录的情况下不加 /

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 中的 / 在作怪。

以上就是Nginx工作模式及代理配置的使用细节的详细内容,更多关于Nginx工作模式代理配置的资料请关注三水点靠木其它相关文章!

Servers 相关文章推荐
Nginx的rewrite模块详解
Mar 31 Servers
nginx处理http请求实现过程解析
Mar 31 Servers
nginx反向代理时如何保持长连接
Mar 31 Servers
uwsgi+nginx代理Django无法访问静态资源的解决
May 10 Servers
Apache Hudi数据布局黑科技降低一半查询时间
Mar 31 Servers
Nginx反向代理、重定向
Apr 13 Servers
Linux中如何安装并部署Redis
Apr 18 Servers
微信告警的zabbix监控系统 监控整个NGINX集群
Apr 18 Servers
CentOS7环境下MySQL8常用命令小结
Jun 10 Servers
windows server 2012安装FTP并配置被动模式指定开放端口
Jun 10 Servers
教你nginx跳转配置的四种方式
Jul 07 Servers
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
Jul 15 Servers
nginx常用配置conf的示例代码详解
Mar 21 #Servers
Nginx设置HTTPS的方法步骤 443证书配置方法
nginx共享内存的机制详解
Nginx的基本概念和原理
解决xampp安装后Apache无法启动
Nginx图片服务器配置之后图片访问404的问题解决
Shell脚本一键安装Nginx服务自定义Nginx版本
You might like
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
2019/05/23 PHP
YII2框架中查询生成器Query()的使用方法示例
2020/03/18 PHP
IE与FireFox的兼容性问题分析
2007/04/22 Javascript
JQuery Tips(4) 一些关于提高JQuery性能的Tips
2009/12/19 Javascript
JQuery autocomplete 使用手册
2010/04/01 Javascript
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
基于jQuery实现表单提交验证
2014/11/24 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
js面向对象编程总结
2017/02/16 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
2017/09/19 jQuery
Vue组件和Route的生命周期实例详解
2018/02/10 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
2019/04/02 Javascript
webpack-mvc 传统多页面组件化开发详解
2019/05/07 Javascript
JS替换字符串中指定位置的字符(多种方法)
2020/05/28 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
[10:14]2018DOTA2国际邀请赛寻真——paiN Gaming不仅为自己而战
2018/08/14 DOTA
用Python编写一个简单的Lisp解释器的教程
2015/04/03 Python
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
Python对列表的操作知识点详解
2019/08/20 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
python爬虫使用正则爬取网站的实现
2020/08/03 Python
使用CSS3创建动态菜单效果
2015/07/10 HTML / CSS
HTML5适合的情人节礼物有纪念日期功能
2021/01/25 HTML / CSS
西式婚礼主持词
2014/03/13 职场文书
2014年大学生四年规划书范文
2014/04/03 职场文书
2014年机关工会工作总结
2014/12/19 职场文书
新员工实习期个人工作总结
2015/10/15 职场文书
2016年党课培训学习心得体会
2016/01/07 职场文书
2016教师政治学习心得体会
2016/01/23 职场文书
Golang中interface{}转为数组的操作
2021/04/30 Golang
Nginx四层负载均衡的配置指南
2021/06/11 Servers