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
代码语言:javascript复制brew list 查看brew安装的软件列表
brew search xx // 搜索
brew install xx // 安装
brew info xx //查看xx信息
brew uninstall xx //卸载
1.用brew安装nginx
代码语言:javascript复制brew install nginx
2.启动nginx
代码语言:javascript复制[sudo] nginx
3.查看nginx的进程
代码语言:javascript复制[sudo] ps aux | grep nginx
访问此地址查看是否启动nginx成功:http://localhost:8080/
4.查看nginx版本
代码语言:javascript复制nginx -v
5.停止nginx
代码语言:javascript复制[sudo] nginx -s stop
6.重新加载nginx
代码语言:javascript复制[sudo] nginx -s reload
7.重启nginx
代码语言:javascript复制[sudo] nginx -s stop && [sudo] nginx
ps:如果启动或重启的时候遇到pid报错则按如下方法杀掉nginx主进程
在进程列表里面找到master进程,他的编号就是主进程号了。
步骤一:询nginx主进程
代码语言:javascript复制ps -ef | grep nginx
步骤2:发送信号
代码语言:javascript复制从容停止:sudo kill -QUIT 主进程号
快速停止:sudo kill -TERM 主进程号
强制停止nginx:sudo pkill -9 nginx
8.nginx默认配置位置
代码语言:javascript复制/etc/nginx/nginx.conf
/usr/local/etc/nginx/nginx.conf
# 或者
/usr/local/nginx/conf/nginx.conf
ubuntu系统
安装
代码语言:javascript复制[sudo] apt-get install nginx
查看nginx是否启动
代码语言:javascript复制ps -ef|grep nginx
关于nginx配置之后获取不到用户真实IP的问题
是因为nginx代理之后未能将ip转发过去。 解决办法:在nginx location匹配项后面加入如下配置即可
代码语言:javascript复制proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
但是如果有多个规则,就需要在每个规则下面重复配置; 解决办法就是在公共的nginx.conf 里面include proxy.conf公共文件 然后在proxy.conf公共文件中加入上面的配置即可将ip转发了。 proxy.conf 文件
代码语言:javascript复制proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
nginx.conf 文件
代码语言:javascript复制http {
####
#...略...#
include /etc/nginx/proxy.conf; # 此文件路径为proxy.conf存放地址
#...略...#
}
之后在nodejs端就可以通过下面的代码获取到真实的ip地址了
代码语言:javascript复制req.get("X-Real-IP") || req.get("X-Forwarded-For") || req.ip,
相关链接
官方配置文档 nginx 配置 location 总结及 rewrite 规则写法 配置nginx