没有静态文件 - nginx ubuntu 服务器 18.04 上的 .net 核心主机具有自定义域
No static files - .net core host on nginx ubuntu server 18.04 with custom domain
问题: 没有加载静态文件 (404)
描述: 通过反向代理在 nginx 上托管 .net 核心 MVC 应用程序。它已配置为支持带有 letsencrypts 证书的 SSL,并配置为可以通过在 sites-available
文件夹中添加配置来托管多个网站。
配置文件:
server {
listen 80;
listen [::]:80;
server_name mydomain.com *.mydomain.com;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
root /var/www/mydomain.com/htdocs;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
尝试: 我尝试了 root
和 try_files
设置的不同变体。此外,尝试添加一个命名的单独 location
部分以通过 try_files
的代理绑定它。为了测试文件是否首先存在,我将 运行 curl
到 localhost:5000
上的文件位置,它肯定存在。
当前状态:访问域时站点确实加载,但它为每个静态文件抛出 404。我在应用程序的配置部分 app.UseStaticFiles();
所以没有丢失。
这是因为您只指定了 1 条规则作为反向代理,即使您指定了 root
属性,它也永远不会被使用。
我们需要做的是使用 2 条规则,一条处理来自另一条的 404:
server {
listen 80;
listen [::]:80;
server_name mydomain.com *.mydomain.com;
location / {
root /var/www/mydomain.com/htdocs;
error_page 404 @app;
}
location @app {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
之所以配置为使用应用程序作为静态文件的后备而不是使用静态文件作为应用程序的后备,是因为如果应用程序有一些代码不是 404 的自定义 404 页面,则静态文件将不会被使用。
然后您就可以从您的应用程序中删除 UseStaticFiles
。
问题: 没有加载静态文件 (404)
描述: 通过反向代理在 nginx 上托管 .net 核心 MVC 应用程序。它已配置为支持带有 letsencrypts 证书的 SSL,并配置为可以通过在 sites-available
文件夹中添加配置来托管多个网站。
配置文件:
server {
listen 80;
listen [::]:80;
server_name mydomain.com *.mydomain.com;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
root /var/www/mydomain.com/htdocs;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
尝试: 我尝试了 root
和 try_files
设置的不同变体。此外,尝试添加一个命名的单独 location
部分以通过 try_files
的代理绑定它。为了测试文件是否首先存在,我将 运行 curl
到 localhost:5000
上的文件位置,它肯定存在。
当前状态:访问域时站点确实加载,但它为每个静态文件抛出 404。我在应用程序的配置部分 app.UseStaticFiles();
所以没有丢失。
这是因为您只指定了 1 条规则作为反向代理,即使您指定了 root
属性,它也永远不会被使用。
我们需要做的是使用 2 条规则,一条处理来自另一条的 404:
server {
listen 80;
listen [::]:80;
server_name mydomain.com *.mydomain.com;
location / {
root /var/www/mydomain.com/htdocs;
error_page 404 @app;
}
location @app {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
之所以配置为使用应用程序作为静态文件的后备而不是使用静态文件作为应用程序的后备,是因为如果应用程序有一些代码不是 404 的自定义 404 页面,则静态文件将不会被使用。
然后您就可以从您的应用程序中删除 UseStaticFiles
。