nginx常用配置

  • Post author:
  • Post category:其他




一. 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 版权协议,转载请附上原文出处链接和本声明。