我正在使用角度2 app,nginx和docker。每次我用/ site重新加载一个页面时,它给我一个404.我的服务器块现在看起来像这样:
server {
listen 0.0.0.0:80;
listen [::]:80;
root /var/www/project/html;
index index.html;
server_name project.com;
location / {
try_files $uri $uri/ /index.html;
}}
我已经尝试了很多,并且已经看到了所有其他stackoverflow问题,并尝试了所有可能性。但没有任何作用。有人可以帮忙吗?
更新: 整个nginx.conf:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
网站启用/默认:
server {
listen 0.0.0.0:80;
listen [::]:80;
root /var/www/project/html;
index index.html;
server_name project.com;
location / {
try_files $uri $uri/ /index.html;
}}
和Dockerfile:
FROM nginx
COPY ./docker/sites-enabled /etc/nginx/sites-enabled
COPY ./docker/nginx.conf /etc/nginx/nginx.conf
COPY ./dist /var/www/project/html
COPY ./dist /usr/share/nginx/html
EXPOSE 80
答案 0 :(得分:2)
在你的nginx.conf中,你要从两个位置加载其他配置:
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
第二个加载您的sites.enabled/default
配置,服务器名称为project.com
。
但是,第一个加载默认配置default.conf
,它是默认情况下nginx泊坞窗图像的一部分。该配置看起来类似于
server {
listen 80;
server_name localhost;
....
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
....
}
因此,如果您尝试使用localhost
访问您的网站,则永远不会使用sites-enabled/default
(因为您指定了server_name project.com
且与localhost
不匹配)。相反,请求在default.conf
中运行,因为server_name是localhost
。
在default.conf
位置部分是:
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
这意味着,如果您只是转到localhost
,则会index.html
投放,所有内容都会按预期运行。但是一旦您尝试访问localhost/something
,Nginx就会尝试查找不存在的文件/目录/usr/share/nginx/html/something
( - > 404)。
所以你必须选择:
从您的nginx.conf中删除include /etc/nginx/conf.d/*.conf;
(或删除default.conf
)并将sites-enabled/default
中的server_name更改为localhost
。然后您的请求将进入您的配置。
将try_files $uri $uri/ /index.html;
添加到default.conf
中sites-enabled/default
的位置。
我会推荐第一个解决方案,不要包含default.conf
并将server_name
更改为localhost
中的sites-enabled/config
。如果您以后需要真正的域名,您仍然可以使用正则表达式来匹配localhost或您的域名。