Ubuntu 我的Nginx配置是500个内部服务器错误的罪魁祸首吗?

Ubuntu 我的Nginx配置是500个内部服务器错误的罪魁祸首吗?,ubuntu,nginx,nginx-config,Ubuntu,Nginx,Nginx Config,我遇到了一个问题,当有人访问服务器上不存在的URL时,下面的Nginx配置返回一个内部服务器错误。预期的响应是服务器返回404状态。在这个配置中是否有某种东西会产生500而不是404的状态代码 注:(实际域已替换为example.com) 操作系统:Ubuntu 18.04 LTS 主机:数据包 Nginx:1.15.9 您应该检查错误日志以了解5xx错误的原因,但是您的try\u files语句正在生成重定向循环。您将URI重写为$URI.php,但不支持php脚本。感谢@RichardS

我遇到了一个问题,当有人访问服务器上不存在的URL时,下面的Nginx配置返回一个内部服务器错误。预期的响应是服务器返回404状态。在这个配置中是否有某种东西会产生500而不是404的状态代码

注:(实际域已替换为example.com)

  • 操作系统:Ubuntu 18.04 LTS
  • 主机:数据包
  • Nginx:1.15.9

您应该检查错误日志以了解5xx错误的原因,但是您的
try\u files
语句正在生成重定向循环。您将URI重写为
$URI.php
,但不支持php脚本。感谢@RichardSmith发现循环。不幸的是,这并不是服务器错误的罪魁祸首,日志也没有提供这些信息。
server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name www.example.com;

        root /srv/www/example.com/pub;

        index index.html index.php;

        access_log /srv/www/example.com/log/access.log;
        error_log  /srv/www/example.com/log/error.log info;

        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/example.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 Certbo


        location / {
                #if ($request_uri ~ ^/(.*)\.html$) {  return 301 /$1;  }
                try_files $uri $uri/ $uri.html $uri.php?$args;
        }

        location = / {expires max;}

        location ~* \.(?:ico|asf|asx|wax|wmv|wmx|avi|bmp|class|css|divx|doc|docx|exe|eot|ttf|ttc|otf|woff|woff2|mp4|ogg|ogv|webm|gif|gz|gzip|htc|ico|jpeg|jpg|png|js|mdb|mid|mi)$ {
                expires 1y;
                add_header "Access-Control-Allow-Origin" "*";
                add_header Cache-Control "public";
        }
}

# Redirect http to https
server {
        listen 80;
        listen [::]:80;
        server_name example.com www.example.com;

        return 301 https://www.example.com$request_uri;
}

# Redirect www to non-www
server {
        listen 443;
        listen [::]:443;
        server_name example.com;

        return 301 https://www.example.com$request_uri;
}