问题:没有加载静态文件(404(
描述:通过反向代理在NGINX上托管.NET Core 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
属性,也从未使用过。我们需要做的是使用两个从另一个处理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
}
之所不使用。
然后您可以从应用程序中删除UseStaticFiles
。