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设置日志打印post请求参数的方法
Mar 31 Servers
apache基于端口创建虚拟主机的示例
Apr 24 Servers
Nginx虚拟主机的搭建的实现步骤
Jan 18 Servers
详解nginx location指令
Jan 18 Servers
Nginx+Windows搭建域名访问环境的操作方法
Mar 17 Servers
Apache Hudi数据布局黑科技降低一半查询时间
Mar 31 Servers
Win10系统搭建ftp文件服务器详细教程
Aug 05 Servers
Centos7 Shell编程之正则表达式、文本处理工具详解
Aug 05 Servers
服务器nginx权限被拒绝解决案例
Sep 23 Servers
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
Sep 23 Servers
nginx常用配置conf的示例代码详解
Mar 21 #Servers
Nginx设置HTTPS的方法步骤 443证书配置方法
nginx共享内存的机制详解
Nginx的基本概念和原理
解决xampp安装后Apache无法启动
Nginx图片服务器配置之后图片访问404的问题解决
Shell脚本一键安装Nginx服务自定义Nginx版本
You might like
php ajax实现文件上传进度条
2016/03/29 PHP
非常有用的9个PHP代码片段
2016/04/06 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
使用jquery写个更改表格行顺序的小功能
2014/04/29 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
2017/09/18 Javascript
浅谈node的事件机制
2017/10/09 Javascript
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
python实现员工管理系统
2018/01/11 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
python 消费 kafka 数据教程
2019/12/21 Python
python实现的Iou与Giou代码
2020/01/18 Python
matlab中二维插值函数interp2的使用详解
2020/04/22 Python
python实现取余操作的简单实例
2020/08/16 Python
Pycharm安装第三方库失败解决方案
2020/11/17 Python
卡西欧B级产品官方网站:Casio Outlet
2018/05/22 全球购物
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
房地产销售员的自我评价分享
2013/12/04 职场文书
机械专业求职信范文
2014/07/15 职场文书
律师授权委托书范本
2014/10/07 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
投诉书范文
2015/07/02 职场文书
2015年国庆节广播稿
2015/08/19 职场文书
五年级语文教学反思
2016/03/03 职场文书
2016大学生国家助学贷款承诺书
2016/03/25 职场文书
Spring中bean的生命周期之getSingleton方法
2021/06/30 Java/Android
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis
Python可变与不可变数据和深拷贝与浅拷贝
2022/04/06 Python
mysql通过group by分组取最大时间对应数据的两种有效方法
2022/09/23 MySQL