Nginx(发音同engine x)是一个网页服务器,它能反向代理HTTP, HTTPS, SMTP, POP3, IMAP的协议链接,以及一个负载均衡器和一个HTTP缓存。
Nginx在官方测试的结果中,能够支持五万个平行连接,而在实际的运作中可以支持二万至四万个平行链接。
整体采用模块化设计是nginx的一个重大特点,甚至http服务器核心功能也是一个模块。
旧版本的Nginx的模块是静态的,添加和删除模块都要对Nginx进行重新编译,1.9.11以及更新的版本已经支持动态模块加载。 —— 来自维基百科
Nginx最初是作为一个web服务器创建的。但是Nginx除了作为web服务器,还有个功能就是提供反向代理服务
利用Nginx你可以适当地分配流量(负载均衡器)、流媒体、动态调整图像大小、缓存内容等等。
正向代理
作为客户端的中介接受请求,隐藏真实的用户,向服务端获取资源,如果代理在墙外,则可以实现翻墙
反向代理
作为服务端的中介,隐藏真实的服务器,目的是为了实现安全和负载均衡等一系列的功能
安全:用户的请求不会直接到内网的服务器上,而是通过代理做了一层转发,在这一层可以实现安全过滤、流控、防DDOS等一系列策略
负载均衡:我们可以水平扩展后端真正提供服务的服务器数量,代理按照规则转发请求到各个服务端,使得各个服务器负载接近均衡
在mac osx
1.brew
1 | brew list 查看brew安装的软件列表 |
1.用brew安装nginx
1 | brew install nginx |
2.启动nginx
1 | [sudo] nginx |
3.查看nginx的进程
1 | [sudo] ps aux | grep nginx |
访问此地址查看是否启动nginx成功:http://localhost:8080/
4.查看nginx版本
1 | nginx -v |
5.停止nginx
1 | [sudo] nginx -s stop |
6.重新加载nginx
1 | [sudo] nginx -s reload |
7.重启nginx
1 | [sudo] nginx -s stop && [sudo] nginx |
ps:如果启动或重启的时候遇到pid报错则按如下方法杀掉nginx主进程
在进程列表里面找到master进程,他的编号就是主进程号了。
步骤一:询nginx主进程
1 | ps -ef | grep nginx |
步骤2:发送信号
1 | 从容停止:sudo kill -QUIT 主进程号 |
8.nginx默认配置位置
1 | /etc/nginx/nginx.conf |
ubuntu系统
安装
1 | [sudo] apt-get install nginx |
查看nginx是否启动
1 | ps -ef|grep nginx |
关于nginx配置之后获取不到用户真实IP的问题
是因为nginx代理之后未能将ip转发过去。
解决办法:在nginx location匹配项后面加入如下配置即可
1 | proxy_set_header Host $host; |
但是如果有多个规则,就需要在每个规则下面重复配置;
解决办法就是在公共的nginx.conf 里面include proxy.conf公共文件
然后在proxy.conf公共文件中加入上面的配置即可将ip转发了。
proxy.conf 文件
1 | proxy_set_header Host $host; |
nginx.conf 文件
1 | http { |
之后在nodejs端就可以通过下面的代码获取到真实的ip地址了
1 | req.get("X-Real-IP") || req.get("X-Forwarded-For") || req.ip, |