Nginx

為什麼 nginx 在 vagrant 下不服務我的 404 頁面?

  • April 16, 2015

我在 /404/index.html 有一個帶有 404 頁面的靜態 HTML 站點。Vagrant 正在將埠 80 映射到 9000,因此我可以在http://localhost:9000. 該站點是可瀏覽的,但如果我嘗試強制執行 404 錯誤,我會看到 /index.html。我試過遵循一堆教程,但它總是最終顯示索引頁面。

如果我這樣做了,vagrant ssh我也有同樣的經歷。唯一的區別是我可以curl http://localhost/404/看到 404 頁面的內容。Ansible{{ }}在配置期間擴展模板項的值。

預設(網站模板)

server {
   listen 80 default_server;
   listen [::]:80 default_server ipv6only=on;

   root {{ web_root }};
   index index.html index.htm;

   # Make site accessible from `http://localhost/`
   server_name localhost;

   location / {
       # First attempt to serve request as file, then
       # as directory, then fall back to displaying a 404.
       try_files $uri $uri/ /index.html;
       # Uncomment to enable naxsi on this location
       # include /etc/nginx/naxsi.rules
   }

   location /doc/ {
       alias /usr/share/doc/;
       autoindex on;
       allow 127.0.0.1;
       allow ::1;
       deny all;
   }

   # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
   #location /RequestDenied {
   #   proxy_pass http://127.0.0.1:8080;
   #}

   error_page 400 404 /404/index.html;
   location = /404/index.html {
       root {{ web_root }};
   }



   # redirect server error pages to the static page /50x.html
   #
   #error_page 500 502 503 504 /50x.html;
   #location = /50x.html {
   #   root /usr/share/nginx/html;
   #}

   # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
   #
   #location ~ \.php$ {
   #   fastcgi_split_path_info ^(.+\.php)(/.+)$;
   #   # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
   #
   #   # With php5-cgi alone:
   #   fastcgi_pass 127.0.0.1:9000;
   #   # With php5-fpm:
   #   fastcgi_pass unix:/var/run/php5-fpm.sock;
   #   fastcgi_index index.php;
   #   include fastcgi_params;
   #}

   # deny access to .htaccess files, if Apache's document root
   # concurs with nginx's one
   #
   #location ~ /\.ht {
   #   deny all;
   #}
}

nginx.conf

user www-data;
worker_processes {{ ansible_processor_count }};

pid /var/run/nginx.pid;

events {
   worker_connections {{ connections }} ;
   # multi_accept on;
}

http {

   ##
   # Basic Settings
   ##

   sendfile on;
   tcp_nopush on;
   tcp_nodelay on;
   keepalive_timeout 65;
   types_hash_max_size 2048;
   server_tokens off;

   # server_names_hash_bucket_size 64;
   # server_name_in_redirect off;

   include /etc/nginx/mime.types;
   default_type application/octet-stream;

   ##
   # Logging Settings
   ##

   access_log /var/log/nginx/access.log;
   error_log /var/log/nginx/error.log;

   ##
   # Gzip Settings
   ##

   gzip on;
   gzip_disable "msie6";

   # gzip_vary on;
   # gzip_proxied any;
   # gzip_comp_level 6;
   # gzip_buffers 16 8k;
   # gzip_http_version 1.1;
   # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

   ##
   # If HTTPS, then set a variable so it can be passed along.
   ##

   map $scheme $server_https {
       default off;
       https on;
   }

   ##
   # Virtual Host Configs
   ##

   include /etc/nginx/conf.d/*.conf;
   include /etc/nginx/sites-enabled/*;
}

老實說,我沒有弄亂不同的 404 頁面,但擁有try_files $uri $uri/ /index.html;和獲得index.html是我所期望的。

嘗試更改為try_files $uri $uri/ /404/index.html;

引用自:https://serverfault.com/questions/531894