一. nginx跨域
-
服务器默认是不被允许跨域的。给Nginx服务器配置
Access-Control-Allow-Origin *
后,表示服务器可以接受所有的请求源(Origin),即接受所有跨域的请求- 协议 + 域名 + 端口号均相同,那么就是同域
-
假如一个域名为
aaa.cn
的网站,它发起一个资源路径为
aaa.cn/books/getBookInfo
的 Ajax 请求,那么这个请求是同域的,因为资源路径的协议、域名以及端口号与当前域一致(例子中协议名默认为http,端口号默认为80)。但是,如果发起一个资源路径为
bbb.com/pay/purchase
的 Ajax 请求,那么这个请求就是跨域请求,因为域不一致,与此同时由于安全问题,这种请求会受到同源策略限制
1. Access-Control-Allow-Origin
# 案例
server {
listen 80;
location / {
# 接受所有跨域的请求
add_header Access-Control-Allow-Origin *;
# 防止出现Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.错误
add_header Access-Control-Allow-Methods '*';
# 防止出现Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.错误
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
root /usr/share/nginx/html/;
index index.html index.htm;
try_files $uri $uri/ /index.html;
二. proxy_set_header
-
proxy_set_header Host $host;
请求头的host字段也放在转发请求中,如果不加, 转发的请求头中没有host字段,而服务器是靠这个host来区分,请求的是哪个域名的资源 -
proxy_set_header X-Real-IP $remote_addr;
和
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
用来设置被代理端接收到的远程客户端IP,如果不设置,则header信息中并不会透传远程真实客户端的IP地址
server {
listen 80;
location / {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods '*';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
root /usr/share/nginx/html/stg/;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /oke-k8s/api/v1 {
proxy_pass http://demo-svc:8080/cko/api/v1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
三. WebSocket
-
Nginx配置WebSocket反向代理, 可以横向扩展WebSocket服务端,
proxy_set_header Upgrade $http_upgrade;
配置
# 也可以不用map这段,单独写到location中
# 如果 $http_upgrade 不为 '' (空),则 $connection_upgrade 为 upgrade
# 如果 $http_upgrade 为 '' (空),则 $connection_upgrade 为 close
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream wsbackend {
server 10.2.2.2:8080;
server 10.2.2.3:8080;
}
server {
listen 80;
location /{
proxy_set_header Upgrade $http_upgrade;
...
}
四. gzip
- 允许将报文进行gzip压缩以后再传输
server {
listen 80;
# 开启gzip压缩
gzip on;
# 允许压缩的最小字节数,默认是0,设置成大于2k的字节数,小于2k可能会越压越大
gzip_min_length 2k;
# 压缩等级,取值1-9,越小压的越厉害,但是越耗cpu
gzip_comp_level 5;
# 启用压缩的文件类型
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/svg+xml image/jpeg image/gif image/png font/woff;
# 启用应答头"Vary: Accept-Encoding"
gzip_vary on;
# 某些特定的IE浏览器不启用压缩,IE6及以下禁止压缩
gzip_disable "MSIE [1-6]\.";
版权声明:本文为moon_naxx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。