1、 HTTP 请求
server {
listen 80;
server_name www.xxxxxxxx.com;
location / {
proxy_pass http://127.0.0.1:8089;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Forwarded $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
root /home/project/WebContent;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /home/project/WebContent;
}
}
2、HTTPS
3、websocket
在http中,添加map指令。map指令作用:
- 如果客户端请求中包含
Upgrade: websocket头,$http_upgrade的值为websocket,$connection_upgrade的值为upgrade。 - 如果客户端请求中没有
Upgrade头,$http_upgrade为空,$connection_upgrade的值为close。
这样可以确保只有WebSocket请求被升级,普通HTTP请求不会受到影响。
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
}
server {
listen 80;
server_name 8.138.240.104;
location / {
proxy_pass http://127.0.0.1:8888;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Forwarded $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
# WebSocket支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade; # 使用nginx.conf中的动态设置
proxy_read_timeout 300s; # 设置为 5 分钟。默认是60秒内没有数据交互时连接被自动关闭
}
}
4、前后端分离(nginx跨域问题)
server {
listen 80;
server_name localhost;
location ~* \.htm$ { # 我的服务端接口格式是: /**/*.htm .
proxy_pass http://127.0.0.1:8221;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Forwarded $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
}
location / { # 非 .htm,应该就是前端的了, 走通过匹配
root /home/system_web;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /home/system_web;
}
}
注意的是,前端发送请求时,url接口不需要再带服务端的端口号:
http://xxx.x.x.xxx:8221/login.htm ==> http://xxx.x.x.xxx/login.htm
5、监听非80端口时的特殊情况
- 比如nginx配置监听8888端口,服务器接口端口号9999。对于spring boot mvc 项目里的
return "redirect:",浏览器访问时,重定向可能会会丢失端口号,从而访问到80端口项目页面。
解决方法:修改nginx配置proxy_set_header Host $host;调整为proxy_set_header Host $host:$server_port;保留原始请求的端口号。
工作中都是使用域名不带端口号的,即默认的80或443。个人搞着玩可能会遇到。