我已在 Ubuntu 20 服务器上部署了 Next.js 14.x 应用程序,并尝试配置 Nginx 将我的网站从非 www URL 重定向到 www URL。我想这样做是为了避免站点重复并避免使用
Auth0
登录时出现错误。下面的代码不会产生预期的重定向。服务器使用 pm2
启动,并在生产模式下在 localhost:3000
上运行,之后站点从 localhost:3000
重定向到域。
域.conf
server {
listen 80;
listen [::]:80;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name www.example.com;
ssl_certificate /etc/nginx/ssl-certs/lapki-certs-key/common-cert.crt;
ssl_certificate_key /etc/nginx/ssl-certs/lapki-certs-key/9172942.key;
location / {
# reverse proxy for next server
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_cache_bypass $http_upgrade;
}
}
我是一名 Web 开发人员,也是 DevOps 的新手。我也害怕犯错误,因为该应用程序现在正在全球运行。可能是我这里配置有误,求懂的人帮忙。
@Raptor 感谢您的建议。 我仔细研究了您建议的答案,它对我有用。很抱歉造成混乱。现在代码如下所示:
server {
listen 80;
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl-certs/common-cert.crt;
ssl_certificate_key /etc/nginx/ssl-certs/9172942.key;
return 301 $scheme://www.example.com$request_uri;
}
server {
listen 80;
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/nginx/ssl-certs/common-cert.crt;
ssl_certificate_key /etc/nginx/ssl-certs/9172942.key;
location / {
# reverse proxy for next server
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_cache_bypass $http_upgrade;
}
}