Nginx 使用细节

简介: Nginx 使用细节

Nginx 使用细节



一、Nginx 的工作模式


1.单进程模式

2.Master-Worker 模式

3.问题处理


二、Nginx 代理配置


1.带 /

2.不带 /


一、Nginx 的工作模式



1.单进程模式


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


image.png


优点:


  • 单进程模式由于只有一个进程,因此可以很方便的利用 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 进程。


image.png


优点: 稳定性高,只要还有 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/


image.png


这里博主来分解一下:


  • 我们 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 /ZhangSan/ {
    proxy_pass http://127.0.0.1/8080;
}


验证:


image.png


这个其实很好理解,因为我们没有在 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/PengYuYan/;
}


验证:


image.png


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/


image.png


其实啊,不管是有目录和没目录,都和博主上面总结的一样。主要还是 Nginx 中的 / 在作怪。


相关文章
|
7月前
|
负载均衡 前端开发 应用服务中间件
Nginx的作用是什么?有什么用?
Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的。由于其非常好用,渐渐被越来越多的人所接受。俄罗斯人的编程能力确实厉害。
93 0
|
4月前
|
缓存 负载均衡 前端开发
【Nginx 第一篇章】认识一下 Nginx
Nginx (engine x) 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。由俄罗斯程序员 Igor Sysoev 开发,并在2004年首次公开发布。Nginx 以其高并发处理能力、低内存消耗、稳定性、丰富的功能集、简单的配置以及低学习曲线而广受欢迎。Nginx 通常被用作 Web 服务器来托管网站,但也可以有效地用作反向代理、负载均衡器和 HTTP 缓存。
75 1
|
网络协议 JavaScript 应用服务中间件
【Nginx用法】nginx配置内容
【Nginx用法】nginx配置内容
55 0
|
应用服务中间件 nginx
Nginx 简单使用
Nginx 简单使用
92 0
|
负载均衡 Unix 应用服务中间件
nginx 基本使用
nginx 基本使用
172 0
|
缓存 负载均衡 监控
Nginx - 原理机制
Nginx - 原理机制
200 0
Nginx - 原理机制
|
负载均衡 网络协议 应用服务中间件
【Nginx】第二节 Nginx的优点
【Nginx】第二节 Nginx的优点
118 0
【Nginx】第二节 Nginx的优点
|
应用服务中间件 nginx 开发者
Nginx 使特殊用法 | 学习笔记
快速学习Nginx 使特殊用法,介绍了 HTTP 代理系统机制, 以及在实际应用过程中如何使用。
Nginx 使特殊用法 | 学习笔记
|
缓存 tengine 负载均衡
Nginx是什么 ? 能干嘛 ?
想必大家一定听说过Nginx,若没听说过它?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator)URL作为沟通依据,通过HTTP协议提供各种网络服务。
|
缓存 应用服务中间件 Linux
Nginx PHP配置与优化(学习笔记二十二)
这篇是Nginx安装配置PHP(FastCGI)环境的教程。Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。
1194 0