NGINX 反向代理 Next.js 项目配置
分享下自己使用 NGINX 代理 Next.js 项目的配置,可以借鉴借鉴
发布于 星期五,三月 22 2024
正常情况,使用 HTTP 协议
# 开启gzip
gzip on;
##
# http配置
##
server {
listen 80;
server_name fuxiaochen.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_read_timeout 60;
proxy_connect_timeout 60;
proxy_redirect off;
# Allow the use of websockets
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /_next/static {
add_header Cache-Control "public, max-age=3600, immutable";
proxy_pass http://127.0.0.1:3000/_next/static;
}
}
使用 HTTPS 时的配置并开启 HTTP2
HTTP2.0 标准中,虽然没有强制提出要使用加密(HTTPS)但是目前主流浏览器,Chrome、Firefox 等都已经公开宣布只支持加密的 HTTP2,所以目前互联网上能见到的 HTTP2 基本都是基于 HTTPS 协议的。所以目前来说,要开启 HTTP2,就必须设置 HTTPS
前提
注意根据自己实际项目信息修改
- Next.js 项目已经 build 了,并且启动了,端口为 3000
- HTTPS 相关证书文件已放在
/etc/nginx/cert
目录下,有以下两个文件- fuxiaochen.com.pem,证书文件名称
- fuxiaochen.com.key,证书私钥文件名称
# 开启gzip
gzip on;
##
# HTTPS配置
##
#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
#配置HTTPS的默认访问端口为443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
#如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
# 默认HTTP 1.1
# listen 443 ssl;
# 开启HTTP2
listen 443 ssl http2;
#填写证书绑定的域名
server_name fuxiaochen.com;
#填写证书文件名称
ssl_certificate /etc/nginx/cert/fuxiaochen.com.pem;
#填写证书私钥文件名称
ssl_certificate_key /etc/nginx/cert/fuxiaochen.com.key;
ssl_session_timeout 5m;
#表示使用的加密套件的类型
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_read_timeout 60;
proxy_connect_timeout 60;
proxy_redirect off;
# Allow the use of websockets
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /_next/static {
add_header Cache-Control "public, max-age=3600, immutable";
proxy_pass http://127.0.0.1:3000/_next/static;
}
}
##
# HTTP配置
##
server {
listen 80;
#填写证书绑定的域名
server_name fuxiaochen.com;
#将所有HTTP请求通过rewrite指令重定向到HTTPS。
rewrite ^(.*)$ https://$host$1;
}
参考链接
- NGINX
- Next.js