我在云中托管了一个虚拟服务器,运行 ubuntu 22.04,注册到我的一个域名 (myapp.com)。我还有另一个域名 (mycompany.com),并在 dns 条目中将其指向 myapp.com,这样我的 nginx 服务器就可以获取这两个域名的流量。
在我的配置文件中,我有一个单独的监听 80,它会重定向到 https,如下所示:
server {
listen 80;
listen [::]:80;
return 302 https://$host$request_uri;
}
然后我有两个 SSL 块,一个用于 mycompany.com,一个用于 myapp.com,myapp 使用端口 5000,mycompany 使用端口 5005:
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name www.myapp.com myapp.com;
location / {
proxy_pass http://127.0.0.1:5000/;
proxy_http_version 1.1;
proxy_set_header Connection keep-alive;
}
}
然后对于我的公司:
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name www.mycompany.com mycompany.com;
location / {
proxy_pass http://127.0.0.1:5005/;
proxy_http_version 1.1;
proxy_set_header Connection keep-alive;
}
}
我有两个 dotnet 服务正在运行,ASPNETCORE_URLS=http://localhost:5000
分别ASPNETCORE_URLS=http://localhost:5005
用于 myapp 和 mycompany 服务。
但当我去www.mycompany.com浏览器地址栏正确反映了 https 重定向,但页面呈现的方式就像我已经转到www.myapp.com。
mycompany 的 dotnet 应用程序包含在相应端口上运行的调用:
app.Urls.Add("http://*:5005");
有谁知道会发生什么事吗?
以下是错误日志文件中的一行:
2023/10/10 19:58:50 [error] 79200#79200: *21 connect() failed (111: Unknown error) while connecting to upstream, client: myipathome,
server: www.myapp.com, request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:5000/favicon.ico",
host: "www.mycompany.com", referrer: "https://www.mycompany.com/"
答案1
我不知道为什么我要让事情变得复杂,但是只要两个站点有单独的证书,一切就都正常了。
我在 sites-enabled 目录下为每个站点都设置了一个 conf,如下所示:
server {
listen [::]:80;
listen 80;
server_name site.com www.site.com;
return 302 https://$host$request_uri;
}
server {
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
server_name site.com www.site.com;
ssl_certificate /etc/letsencrypt/live/www.site.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.site.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://127.0.0.1:5010/;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
}
我的另一个收获是,上游块对于我正在做的事情来说不是必需的。最初,我有一个代理传递http://dotnet
,然后是一个上游块,我认为这只是为了负载平衡。因为我是单台服务器,所以我不需要这个。我没有找到对此的明确解释(或者如果有的话我不明白),所以我真的很困惑如何在一台服务器上运行多个 dotnet 站点的情况下使用它。