MelonBlog

笔记:Nginx常用配置

记录一些使用nginx过程中常用的配置

location

反向代理

# 所有/api开头的请求走反向代理
location ^~ /api {
		proxy_pass http://localhost:8080;
}
# 所有/api开头的请求走反向代理,并且去掉/api前缀
location ^~ /api {
		rewrite ^/api/(.*)$ /$1 break;
		proxy_pass http://localhost:8080;
}

单页面路由

单页面项目使用中,刷新页面会导致404,因为location只配置了根路径,所以需要try_files指令来重新找到index.html

location / {
    root <your_project_folder>;
    try_files $uri $uri/ /index.html;
}

支持websocket

location <im_path> {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_pass http://localhost:<im_port>;
}

静态资源缓存

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|mp4|svg|webp)$ {
    #过期时间为7天,
    #图片文件不怎么更新,过期可以设大一点,
    #如果频繁更新,则可以设置得小一点。
    expires 7d;
    proxy_pass http://localhost:3000;
}
location ~ .*\.(js|css)$ {
    expires 60s;
    proxy_pass http://localhost:3000;
}
location / {
    proxy_pass http://localhost:3000;
}

server

增加ssl证书

server {
		#HTTPS的默认访问端口443。
		#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
		listen 443 ssl;
		server_name <server_name>;
		
		#填写证书文件绝对路径
		ssl_certificate <pem path>;
		#填写证书私钥文件绝对路径
		ssl_certificate_key <key path>;
		
		ssl_session_cache shared:SSL:1m;
		ssl_session_timeout 5m;
		
		#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
		#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
		ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
		ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
		
		#表示优先使用服务端加密套件。默认开启
		ssl_prefer_server_ciphers on;
		
		# Load configuration files for the default server block.
		include /etc/nginx/default.d/*.conf;
		
		location / {
		    root <project_folder>;
		    index index.html;
		}
		
		error_page 404 /404.html;
		    location = /40x.html {
		}
		
		error_page 500 502 503 504 /50x.html;
		    location = /50x.html {
		}
}
server {
    listen 80;
    #填写证书绑定的域名
    server_name <server_name>;
    #将所有HTTP请求通过rewrite指令重定向到HTTPS。
    rewrite ^(.*)$ https://${server_name}$1 permanent; 
}