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 过滤静态资源文件的访问日志的实现
Mar 31 Servers
win10安装配置nginx的过程
Mar 31 Servers
制作能在nginx和IIS中使用的ssl证书
Jun 21 Servers
nginx反向代理配置去除前缀案例教程
Jul 26 Servers
详解Nginx 被动检查服务器的存活状态
Oct 16 Servers
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
Nov 17 Servers
Nginx+Windows搭建域名访问环境的操作方法
Mar 17 Servers
Tomcat项目启动失败的原因和解决办法
Apr 20 Servers
KVM基础命令详解
Apr 30 Servers
ubuntu下常用apt命令介绍
Jun 05 Servers
Apache POI操作批量导入MySQL数据库
Jun 21 Servers
Nginx文件已经存在全局反向代理问题排查记录
Jul 15 Servers
nginx常用配置conf的示例代码详解
Mar 21 #Servers
Nginx设置HTTPS的方法步骤 443证书配置方法
nginx共享内存的机制详解
Nginx的基本概念和原理
解决xampp安装后Apache无法启动
Nginx图片服务器配置之后图片访问404的问题解决
Shell脚本一键安装Nginx服务自定义Nginx版本
You might like
PHP学习之PHP表达式
2006/10/09 PHP
一个PHP的ZIP压缩类分享
2014/05/04 PHP
PHP开发中csrf攻击的简单演示和防范
2017/05/07 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
2020/05/27 PHP
入门基础学习 ExtJS笔记(一)
2010/11/11 Javascript
js浮动图片的动态效果
2013/07/10 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
2014/04/25 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
详解Vue+ElementUI从零开始搭建自己的网站(一、环境搭建)
2019/04/30 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
2020/02/24 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
2020/03/03 Javascript
JS替换字符串中指定位置的字符(多种方法)
2020/05/28 Javascript
[40:12]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
[58:35]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
python动态监控日志内容的示例
2014/02/16 Python
Python工程师面试必备25条知识点
2018/01/17 Python
详谈python3 numpy-loadtxt的编码问题
2018/04/29 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
解决Pycharm界面的子窗口不见了的问题
2019/01/17 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
python 数据库查询返回list或tuple实例
2020/05/15 Python
python判断元素是否存在的实例方法
2020/09/24 Python
html5的localstorage详解
2017/05/09 HTML / CSS
Cecil Mode法国在线商店:女性时尚
2021/01/08 全球购物
团员学习总结的自我评价范文
2013/10/14 职场文书
少先队中队工作总结2015
2015/07/23 职场文书
采购部年度工作总结
2015/08/13 职场文书
演讲稿之我的初心我的成长
2019/08/12 职场文书
CSS元素定位之通过元素的标签或者元素的id、class属性定位详解
2022/09/23 HTML / CSS