nginx.conf中的try_files不起作用

时间:2017-09-28 12:07:59

标签: angular docker nginx

我正在使用角度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

1 个答案:

答案 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)。

所以你必须选择:

  1. 从您的nginx.conf中删除include /etc/nginx/conf.d/*.conf;(或删除default.conf)并将sites-enabled/default中的server_name更改为localhost。然后您的请求将进入您的配置。

  2. try_files $uri $uri/ /index.html;添加到default.confsites-enabled/default的位置。

  3. 我会推荐第一个解决方案,不要包含default.conf并将server_name更改为localhost中的sites-enabled/config。如果您以后需要真正的域名,您仍然可以使用正则表达式来匹配localhost或您的域名。