Nginx的常见用法
Nginx的安装
我用的是Ubuntu, 先升级一下apt-get
sudo apt-get update
然后直接apt安装
sudo apt-get install nginx
等待安装完成后,可以先查询一下版本
nginx -v
基本配置
默认会安装到/etc/nginx目录,我们进到这个目录ls 一下,会看到如下的目录结构
使用vi来修改配置文件
sudo vi nginx.conf
配置文件很长,但做反向代理的话,只需要关注几个地方,分别是:
和
http块里的东西都是用来配置转发的,下面的两个文件则是nginx的日志文件
假设我现在服务器上跑着一个服务,端口是8080,如果要访问的话,只能用
http://域名或IP:8080
来访问,一是要输入端口,就要在服务器上多开端口,二是显得不高端(2333)
或者是你在服务器上放了两个项目,然后你弄了两个域名,想A域名进A服务,B域名进B服务,这个时候就需要到了我们的反向代理来处理,在第一种情况,假设你的域名是www.abc.com你只需要在配置文件中的http块中,添加一段配置
server {
listen 80;
server_name www.abc.com;
location / {
# 这里与防火墙外网端口一致
# 否则下面$server_port调取就会出端口不同,造成样式无法加载!!!!
# 还有个原因是,内外网都能访问!!
# 这里$server_port是调取 listen的端口!
# 该行的意思是,在转发后获取原始的ip与端口
proxy_set_header Host $host:$server_port;
#这里表示把原始的信息带入进来
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#实际要访问的域名地址;要跟实际访问域名对应
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:8080;
}
}
添加完成后,就可以启动nginx来试试了,看看输入网址之后有没有跳转到你的服务
假如你的服务还需要上传文件,那就需要在上面的server块中添加(就是和)listen在同一层级,后面跟着的数字是最大限额,超过了就会阻止上传
client_max_body_size 1024m;
这样我们启动nginx
sudo systemctl start nginx.service
然后进行访问,就可以了
如果你有多个服务,就多加几个server块,如果你有多个url都想指向一个服务,可以在server_name上如下配置:
# 中间使用空格隔开
# 不要忘了结尾的分号
server_name www.abc.com www.def.com;
你现在访问的我的博客,就是这样配置的,你可以试试http://blog.skiingpartner.com/ 和http://kiingpartner.com/ 看看访问的到是是不是同一个服务
后台获取信息
在上面的配置文件里,有好几个proxy_set_header的配置,如果不带的话,会造成在转发请求的时候,没有带请求的原始信息,我们在后台服务调用request获取的时候,拿到的ip是127.0.0.1,在配置了上面的配置项之后,可以在后台代码中这样获取
// 注入 HttpServletRequest
@Autowired
HttpServletRequest request;
request.getHeader("X-Real-IP")
request.getHeader("Host")
request.getHeader("X-Forwarded-For")
request.getHeader("X-NginX-Proxy")
这样就可以在后台拿到原始请求的信息了,当然,如果还想拿其他的,也可以塞到里边,就看项目需求和功能了