我有一个 Ubuntu 24.10 Digitalocean VPS,我想使用 Nginx 托管两个网站。
一个是website-name.com
我想要托管一个 Next JS 网站的静态导出的地方,我已将其内容复制到该/var/www/out
文件夹中,另一个是subdomain.website-name.com
我想要托管一个正在运行的 Next JS 应用程序的地方localhost:3000
。
在文件夹中/etc/nginx/sites-available/
,我有一个名为的配置文件myapp
,它充当 的代理localhost:3000
。此配置文件如下:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
server {
listen 80;
server_name subdomain.website-name.com;
# Redirect all HTTP requests to HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name subdomain.website-name.com;
ssl_certificate /etc/letsencrypt/live/website-name.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/website-name.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
# Enable rate limiting
limit_req zone=mylimit burst=20 nodelay;
location / {
proxy_pass http://localhost:3000;
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;
# Disable buffering for streaming support
proxy_buffering off;
proxy_set_header X-Accel-Buffering no;
}
}
我在文件夹中还有另一个配置文件,/etc/nginx/sites-available/
用于website-name.com
提供静态网站,其内容可从该/var/www/out
文件夹中获取。此配置文件如下:
server {
listen 80;
server_name website-name.com;
root /var/www/out;
location / {
try_files $uri $uri.html $uri/ =404;
}
error_page 404 /404.html;
location = /404.html {
internal;
}
}
我从Next JS 的文档页面获得了此配置。
我没有在 URL 上获取静态网站https://website-name.com
,而是获取了正在运行的 Next JS 应用程序localhost:3000
。
在 URL 上https://subdomain.website-name.com
我按要求正确获取了 Next JS 应用程序。
我不知道出了什么问题。有人能帮忙吗?
注意:我也曾将certbot
证书扩展为website-name.com
(我已按照此问题subdomain.website-name.com
的答案进行操作)。我还为创建了一条记录。A
subdomain.website-name.com
在您的配置文件中,有一个
server
块监听端口 443(https),subdomain.example.com
但没有监听example.com
。当 Nginx收到请求时
https://example.com
,它会检查所有server
在 443 端口上监听的块以查找匹配的块server_name
。如果找不到匹配项,它将使用端口 443 的默认服务器(在本例中,这是唯一
server
在端口 443 上监听的服务器)。您需要为 定义一个服务器块
https://example.com
,例如: