Skip to content

nginx 配置

简单示例

nginx
server {
    listen 80; # 监听 80 端口
    server_name snowinlu.top; // 服务器地址
    return 301 https://$host$request_uri; # HTTP 重定向到 HTTPS
}

server {
    listen 443 ssl; // 监听 https 端口
    server_name snowinlu.top; // 服务器地址

    ssl_certificate /etc/nginx/cert/memos.snowinlu.top.pem; // ssl 证书
    ssl_certificate_key /etc/nginx/cert/memos.snowinlu.top.key; // ssl 私钥

    ssl_protocols TLSv1.2 TLSv1.3; # 支持的协议版本
    ssl_ciphers HIGH:!aNULL:!MD5; # 加密套件

    location / {
        root /usr/local/project/hexo-stellar-archiv; // 项目地址
        index index.html index.htm; // 入口文件
        try_files $uri $uri/ =404;
    }
}

负载均衡

nginx
http {
    #设定负载均衡的服务器列表
    upstream load_balance_server {
        #weigth参数表示权值,权值越高被分配到的几率越大
        server 192.168.1.11:80   weight=5;
        server 192.168.1.12:80   weight=1;
        server 192.168.1.13:80   weight=6;
    }

   #HTTP服务器
   server {
        #侦听80端口
        listen       80;

        #定义使用www.xx.com访问
        server_name  www.helloworld.com;

        #对所有请求进行负载均衡请求
        location / {
            root        /root;                 #定义服务器的默认网站根目录位置
            index       index.html index.htm;  #定义首页索引文件的名称
            proxy_pass  http://load_balance_server ;#请求转向load_balance_server 定义的服务器列表

            #以下是一些反向代理的配置(可选择性配置)
            #proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header X-Forwarded-For $remote_addr;
            #nginx跟后端服务器连接超时时间(代理连接超时)
            proxy_connect_timeout 90;    
            #后端服务器数据回传时间(代理发送超时)      
            proxy_send_timeout 90;        
            #连接成功后,后端服务器响应时间(代理接收超时)     
            proxy_read_timeout 90;             
            #设置代理服务器(nginx)保存用户头信息的缓冲区大小
            proxy_buffer_size 4k;              
            #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
            proxy_buffers 4 32k;      
            #高负荷下缓冲大小(proxy_buffers*2)         
            proxy_busy_buffers_size 64k;      
            #设定缓存文件夹大小,大于这个值,将从upstream服务器传 
            proxy_temp_file_write_size 64k;    

            #允许客户端请求的最大单文件字节数
            client_max_body_size 10m;          
            #缓冲区代理缓冲用户端请求的最大字节数
            client_body_buffer_size 128k;      
        }
    }
}

负载均衡策略:

  • 轮询 (all weight default 1)
  • 加权轮询 (set weight, other default 1)
  • 最少连接 (least_conn;)
  • 加权最少连接 (least_conn; set weight)
  • IP hash (ip_hash;)
  • 普通 hash (hash $request_uri;)

网址有多个 webapp

例如:

snowinlu.top/blog

snowinlu.top/home

snowinlu.top/memo

配置:

nginx
http {
	#此处省略一些基本配置

	upstream home_server{
		server snowinlu.top:8081;
	}

	upstream blog_server{
		server snowinlu.top:8082;
	}

	upstream memo_server{
		server snowinlu.top:8083;
	}

	server {
		#此处省略一些基本配置
		#默认指向 home 的 server
		location / {
			proxy_pass http://home_server;
		}

		location /home/{
			proxy_pass http://home_server;
		}

		location /blog/ {
			proxy_pass http://blog_server;
		}

		location /memo/ {
			proxy_pass http://memo_server;
		}
	}
}

跨域配置

设置 cors:

nginx
# allow origin list
set $ACAO '*';

# set single origin
if ($http_origin ~* (www.helloworld.com)$) {
  set $ACAO $http_origin;
}

if ($cors = "trueget") {
	add_header 'Access-Control-Allow-Origin' "$http_origin";
	add_header 'Access-Control-Allow-Credentials' 'true';
	add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
	add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}

if ($request_method = 'OPTIONS') {
  set $cors "${cors}options";
}

if ($request_method = 'GET') {
  set $cors "${cors}get";
}

if ($request_method = 'POST') {
  set $cors "${cors}post";
}

在服务器中引用:

nginx
upstream front_server{
  server www.helloworld.com:9000;
}
# 后端接口地址
upstream api_server{
  server www.helloworld.com:8080;
}

server {
  listen       80;
  server_name  www.helloworld.com;

  location ~ ^/api/ {
    # 引用 cors
    include enable-cors.conf;
    proxy_pass http://api_server;
    rewrite "^/api/(.*)$" /$1 break;
  }

  location ~ ^/ {
    proxy_pass http://front_server;
  }
}
2025( )
今日 8.33%
本周 42.86%
本月 48.39%
本年 4.11%
Powered by Snowinlu | Copyright © 2024- | MIT License