【问题标题】:Nginx 1.18.0 not executing php files, using php7.4-fpmNginx 1.18.0 不执行 php 文件,使用 php7.4-fpm
【发布时间】:2021-11-24 22:15:59
【问题描述】:

提前致歉,这是一个相当长的描述,对于我的实际问题,请跳到下面的问题部分,另请参阅配置文件

我正在为我工​​作的地方设置一组内部网站,我决定使用 nginx 作为我使用的主要应用程序 (GitLab) 在下面使用它。虽然我现在认为这可能不太明智!)。

我可以让 GitLab 正常运行。我暂时将其“关闭”,以便获得运行页面的入口点。

背景 计划。

运行单个页面进行条目,然后在子域上运行各种“应用程序”。

所以主服务器称为reslab,然后我们将在子域上运行gitlab.reslab,然后在其他子域上运行我们需要的任何其他项目。

所以我们计划将我们所有的文档放到一个 mediawiki 中,这样它就可以在 wiki.reslab 上使用 此外,我们希望运行单元网站的测试版本,该网站将驻留在testweb.reslab。最终,我预计会有更多的东西出现在这里,例如特定项目的子站点。

由于主站点在 WordPress 上运行,我决定使用 wordpress 作为所有可能创建的页面的主要开发选项。

问题

每当我打开一个 php 文件的链接时,该文件都会被下载,而不是被执行。

起初我意识到文档根目录中的文件不可执行,但这并没有帮助。 我已经检查了 php 配置中套接字文件的位置,它出现在下面的配置文件中。 我原本想将配置文件拆分成更小的部分,但在使用nginx -t 测试配置时出现持续错误。 我是否将文件包含在错误的位置?它们是否都应该在 nginx.conf 文件中(而不是放在 relab.conf 文件中?)~ 尽管将它们放入 nginx.conf 文件中只会给出关于项目被双重声明的错误,以及它们在 wopress 站点的位置在我看来,将它们留在站点特定的配置文件中是有道理的。 有没有办法输出包含的文件的详细信息,所以我可以确定我错过了一个配置文件。

系统正在运行debian:Linux reslab 5.10.0-8-amd64 #1 SMP Debian 5.10.46-5 (2021-09-23) x86_64 GNU/Linux

我已经安装了php和nginx,并且都在运行

php:

sudo service php7.4-fpm status
● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2021-10-04 13:34:06 CEST; 7s ago
       Docs: man:php-fpm7.4(8)
    Process: 434953 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/7.4/fpm/pool.d/www.conf 74 (code=exited, status=0/SUCCESS)
   Main PID: 434950 (php-fpm7.4)
     Status: "Ready to handle connections"
      Tasks: 3 (limit: 43238)
     Memory: 9.8M
        CPU: 56ms
     CGroup: /system.slice/php7.4-fpm.service
             ├─434950 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
             ├─434951 php-fpm: pool www
             └─434952 php-fpm: pool www

nginx:

sudo service nginx status
[sudo] password for davem: 
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2021-10-04 12:08:34 CEST; 1h 51min ago
       Docs: man:nginx(8)
    Process: 425978 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 425979 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 425980 (nginx)
      Tasks: 13 (limit: 43238)
     Memory: 11.7M
        CPU: 73ms
     CGroup: /system.slice/nginx.service
             ├─425980 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ├─425981 nginx: worker process
             ├─425982 nginx: worker process
             ├─425983 nginx: worker process
             ├─425984 nginx: worker process
             ├─425985 nginx: worker process
             ├─425986 nginx: worker process
             ├─425987 nginx: worker process
             ├─425988 nginx: worker process
             ├─425989 nginx: worker process
             ├─425990 nginx: worker process
             ├─425991 nginx: worker process
             └─425992 nginx: worker process

设置

我打算将主站点命名为服务器,这是它的 nginx 配置。

/etc/nginx/nginx.conf

sudo more nginx.conf 
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

#######################################################
### Config for Wordpress multi sites      ########
#######################################################

worker_cpu_affinity auto; #worpress

        ##
        # For Virtual Host Configs
        ##

#        include /etc/nginx/conf.d/*.conf;
#        include /etc/nginx/sites-enabled/*.conf; # I do this later on ...


events {
    worker_connections 1024;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    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;

    ##
    # SSL Settings
    # it may be internal, but I want to set up good practice
    # internal pages using a self signed certificate
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

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

    #error log levels are : warn, error crit, alert, and emerg
    # just add one to the end of the below line before the ';'
    # eg    error_log /var/log/nginx/error.log warn;
    error_log /var/log/nginx/error.log debug;

    ##
    # Gzip Settings
    ##

    gzip on;

    # 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/javascript text/xml application/xml application/xml+rss text/javascript;


    #for the inclusion of other sites config files
        include /etc/nginx/sites-enabled/*.conf;

# for wordpress to use php
# Upstream to abstract backend connection(s) for PHP.
    upstream php {
                #this should match value of "listen" directive in php-fpm pool
        server unix:/var/run/php/php7.4-fpm.sock;
       server 127.0.0.1:9000;
    }


# below is for gitlab config that cannot be in the main server section.

upstream gitlab-workhorse {
  server unix://var/opt/gitlab/gitlab-workhorse/sockets/socket fail_timeout=0;
 }

}


启用网站

/etc/nginx/sites-enabled/reslab.conf:

# This will be our default landing page configuration
# All the sub sites, and this one, are using wordpress
# the exception is the gitlab subdomain

server {
    listen 80 default_server;
    listen [::]:80 default_server;


    # SSL configuration
    #
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    #
    # Note: You should disable gzip for SSL traffic.
    # See: https://bugs.debian.org/773332
    #
    # Read up on ssl_ciphers to ensure a secure configuration.
    # See: https://bugs.debian.org/765782
    #
    # Self signed certs generated by the ssl-cert package
    # Don't use them in a production server!
    #
    # include snippets/snakeoil.conf;

    ## Strong SSL Security
    ## see https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html & https://cipherli.st/
    # ssl on; # this line is deprecated and replaced by the listen 0.0.0.0:443 directive above (just after the start of the server section)
    ssl_certificate /etc/nginx/ssl/reslab.crt;
    ssl_certificate_key /etc/nginx/ssl/reslab.key;

    #Some extra ssl wordpress stuff

    # Set caches, protocols, and accepted ciphers. This config will merit an A+ SSL Labs score as of Sept 2015.
    ssl_session_cache shared:SSL:20m;
    ssl_session_timeout 10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5';

    # Enable HSTS. This forces SSL on clients that respect it, most modern browsers. The includeSubDomains flag is optional.
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

#document root for the main langing page
    root /var/www/reslab/wordpress;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html index.php;

    #ensure that all the sub server are considered equally using the '.reslab'
    server_name 10.69.60.18  reslab .reslab *.reslab;


    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }

    #add specific logging for this server.
    access_log /var/log/nginx/reslab_access.log;
    #set to debug whilst troubleshooting php problems
    error_log /var/log/nginx/reslab_error.log debug;


}

    #set the mapping of this site to its relevant blog pages
    # this needs to be outside of the server block (but in the http block)
    map $http_host $blogid {
        default       -999;
 
        #Ref: https://wordpress.org/extend/plugins/nginx-helper/
        #include /var/www/wordpress/wp-content/plugins/nginx-helper/map.conf ;
 
    }


#here is the wordpress specific stuff, that should be copied into most subdomains.
#remember to modify as required the server root if you have just made a simple copy of this file

server {
location = /favicon.ico {
                log_not_found off;
                access_log off;
        }
 
        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }
 
        location / {
                # This is cool because no php is touched for static content.
                # include the "?$args" part so non-default permalinks doesn't break when using query string
                try_files $uri $uri/ /index.php?rt=$uri&$args;
        }
 

    # load the nginx php / fastCGI support module
    include /etc/nginx/fcgiwrap.conf;

    # this is required to tell nginx to run php files on the server not as a downloadable file !
        location ~ \.php$ {
                #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
                try_files $uri /index.php =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # lots of the lines below can be included in the following file(s)
                include fastcgi.conf;
                include snippets/fastcgi-php.conf;
                fastcgi_intercept_errors on;
                # the fastci_index is included via the snippets/fastcgi_php.conf file so is not needed here
               # the line is left here for reference
               #fastcgi_index index.php;
               fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
               include fastcgi_params;

        # can run php through a file socket or via an ip
        #fastcgi_pass 127.0.0.1:9000;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;

        }
 
        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }

 #WPMU Files
        location ~ ^/files/(.*)$ {
                try_files /wp-content/blogs.dir/$blogid/$uri /wp-includes/ms-files.php?file=$1 ;
                access_log off; log_not_found off;      expires max;
        }
 
    #WPMU x-sendfile to avoid php readfile()
    location ^~ /blogs.dir {
        internal;
        alias /var/www/example.com/htdocs/wp-content/blogs.dir;
        access_log off;     log_not_found off;      expires max;
    }
 

# ensure that no one is able to write directly to the server from the web page.
    location ~ /\.ht {
        deny all;
    }

    #add some rules for static content expiry-headers here


}


/etc/nginx/fastcgi.conf


fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  REMOTE_USER        $remote_user;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;


/etc/nginx/fastcgi_params(和fastcgi.conf一模一样?两个都需要吗?)

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  REMOTE_USER        $remote_user;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

/etc/nginx/sn-ps/fastcgi-php.conf

# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+?\.php)(/.*)$;

# Check that the PHP script exists before passing it
# we do this in the sites config file, so no need for duplication
#try_files $fastcgi_script_name =404;

# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;

fastcgi_index index.php;

#this looks back at the earlier file, does this circular reference cause a problem ?
include fastcgi.conf;

/etc/php/7.4/fpm/php.ini没有从安装的版本修改,而且相当大,除了那一行

cgi.fix_pathinfo = 1

有些指南建议这应该是 0(零)而 nginx 建议是 1,我已经尝试了这两个值......并且没有区别。

nginx是否需要一个特殊的模块来运行php才能运行?

该文件将被下载,如果我从 localhost 或通过其 IP 地址访问它没有区别。

我有什么明显的遗漏吗?

我可以从 cli 运行一个简单的 phpinfo() 调用,我得到了预期的输出。

需要更多配置细节...随时询问。

提前致谢

戴夫

编辑 1

所以我已经尝试了在其中包含 php 详细信息的服务器块中的所有 listen 和 server_name 变体。

我已在此站点的错误文件中打开调试日志记录,查看它指出http script var: "/wp-admin/install.php" 似乎将其视为 php 脚本,并证明它清楚地捕获了正确的文件。我也尝试过使用基本的 info.php 文件...这是日志的一部分...

try files handler
2021/10/04 16:21:17 [debug] 452491#452491: *3 http script var: "/info.php"
2021/10/04 16:21:17 [debug] 452491#452491: *3 trying to use file: "/info.php" "/var/www/reslab/wordpress/info.php"
2021/10/04 16:21:17 [debug] 452491#452491: *3 try file uri: "/info.php"
2021/10/04 16:21:17 [debug] 452491#452491: *3 generic phase: 13
2021/10/04 16:21:17 [debug] 452491#452491: *3 content phase: 14
2021/10/04 16:21:17 [debug] 452491#452491: *3 content phase: 15
2021/10/04 16:21:17 [debug] 452491#452491: *3 content phase: 16
2021/10/04 16:21:17 [debug] 452491#452491: *3 content phase: 17
2021/10/04 16:21:17 [debug] 452491#452491: *3 content phase: 18
2021/10/04 16:21:17 [debug] 452491#452491: *3 http filename: "/var/www/reslab/wordpress/info.php"

我觉得这里应该有一些线索,服务器告诉我它被识别为 http script 而不是 fastcgi 脚本?

编辑 2

所以我只是登录到服务器,并在本地运行 firefox。正如我所料,它会尝试下载文件。但是它想在 Firefox 中“打开”它......当我这样做时,它只是重新下载......

但是,当我从下载列表中选择“其他”选项时,下一个窗口会显示以下消息:

application/octet-stream 文件没有应用程序。

这让我印象深刻,因为 Firefox 试图告诉我这是一个“应用程序”,还是我误解了 FFX 消息?

此外,当我在远程 PC 上执行相同操作时,我仍然会看到“使用 geany 打开”选项。

编辑 3

所以我想到这可能是权限问题。所以我从终端运行 info.php 脚本作为 www-data(用户和组):

sudo su -s /bin/bash -c "php info.php" -g www-data www-data

我得到了预期的输出。

注意当我这样做时通过 ssh 登录到服务器。

我的另一种感觉是包含在某些方面不正确?有没有办法调试包含的文件(类似于nginx -t,但输出更详细?)

【问题讨论】:

  • @virullius :这是一个公平的观点。该网站作为一个平面 html 运行良好,SSL 的东西按原样运行(为了完整性,我将其包括在内),补充谎言是 wordpress 网站所需的所有内容,我同意这些文件有相当数量行,并且我已经包含了所有补充文件(以防万一它们是问题所在)。老实说,两个主配置文件中的行都不多,我只有很多 cmets(也许我应该删除)
  • 2 票结束这个问题!好的,所以配置文件相当大......但无论如何你都会要求它们!过去我看到这个问题出现了很多,但最近没有。另一个都在使用版本 5 或更早的 php-fpm 版本,nginx 也是如此(它们都可以追溯到 2016 年左右或更早)。我看过很多(也许全部!)。如果您希望我添加详细信息,请询问。

标签: php linux wordpress nginx


【解决方案1】:

首先,对于一个简单的问题,这配置太多,无法解决问题,将其精简为可以工作的最小配置,然后添加到其他站点、缓存等会容易得多。

但在快速扫描中,执行 fastcgi_pass 的服务器块没有监听指令,因此无法点击该配置。

还有:

问:“nginx是否需要一个特殊的模块来运行php才能运行?”

A:不,不是专门针对 php。 FastCGI 是您用来通过标准协议联系 php 的模块。

【讨论】:

  • 这看起来很简单....但没有帮助!我尝试了以下方法:听 127.0.0.1:80 和听 127.0.0.1:443,听 [::]:80,听 [::]:443,听 80,听 443。它确实提出了下一个问题,如果每个服务器块有一个监听指令?也许我在其他地方错过了这个?
  • 不同的服务器块需要监听不同的端口或使用 server_name 指令来区分它们并响应请求中的主机名。这称为虚拟主机。参考:nginx.org/en/docs/http/server_names.html
  • 所以我添加了 server_name _ 作为一个包罗万象的内容......但我的服务器上仍然没有发生 php 爱。
  • 我在原版的编辑中添加了,请看一下
  • @DaveM 添加当前版本的 nginx 配置不起作用,所以我们可以看到错误在哪里。顺便说一句,您是否重新启动了 nginx,清除了浏览器缓存?如此处所写dariuscoder.com/2021/09/29/wordpress-nginx-config chrome 即使在更改 nginx 配置后也会下载,至少在那个书面案例中是这样。即使 inf nginx 没有启动,它也会从缓存中下载。
【解决方案2】:

我不知道你为什么要更改 nginx.conf,我通常不会那样做。我在可用站点中编辑配置:

也许你应该试试我的 nginx.conf:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 768;
    # 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;

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

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

    ##
    # Gzip Settings
    ##

    gzip on;

    # 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/javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Virtual Host Configs
    ##

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


#mail {
#   # See sample authentication script at:
#   # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#   # auth_http localhost/auth.php;
#   # pop3_capabilities "TOP" "USER";
#   # imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#   server {
#       listen     localhost:110;
#       protocol   pop3;
#       proxy      on;
#   }
# 
#   server {
#       listen     localhost:143;
#       protocol   imap;
#       proxy      on;
#   }
#}

然后在 sites_available 中放置我博客中的配置:

server {

    # https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-20-04
    listen 80;
    server_name wordpress.darius;
    root /home/darius/Private/Projects/wordpress;

    index index.html index.htm index.php;

    location / {

      # https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-lemp-on-ubuntu-20-04#prerequisites
       try_files $uri $uri/ /index.php$is_args$args;
      # end https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-lemp-on-ubuntu-20-04#prerequisites

    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
    # end https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-20-04

    # https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-lemp-on-ubuntu-20-04#prerequisites
    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt { log_not_found off; access_log off; allow all; }
    location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    }
    #end https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-lemp-on-ubuntu-20-04#prerequisites

}

在 fastcgi.conf 中,我看到你的文件中存在差异

fastcgi_param  REMOTE_USER        $remote_user;

但在我这里没有这样的行。与 /etc/nginx/fastcgi_params 相同

在fastcgi-php.conf中和你的差别不大,我的文件是这样的:

# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+\.php)(/.+)$;

# Check that the PHP script exists before passing it
try_files $fastcgi_script_name =404;

# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;

fastcgi_index index.php;
include fastcgi.conf;

我也从来没有改变过这个文件。

在我的情况下,cgi.fix_pathinfo 是 On。

不确定包含的顺序是否有问题,因为我不修改那些配置,除了站点可用目录中的配置。

所以试试我的配置。然后,如果可行,请一点一点地进行更改以满足您的需求。然后你应该准确地找到哪个部分使它不起作用。

如您所见,我使用的是 php 8,所以我也将它推荐给您,或者更改我的配置示例中的值。

【讨论】:

  • 谢谢你,我现在就试试。我和你一样我并没有真正修改 nginx.conf 文件。 gitlab 需要其中的更改,我已暂时将其从启用站点中删除,以确保我只看到问题站点。我会试试你的配置并报告。谢谢。
  • gitlab 的这些更改真的不能在sites_available 配置中吗?我认为它应该通过添加到 sites_avaliable docs.gitlab.com/omnibus/settings/nginx.html#vhost-server-block 来工作
  • re gitlab,这是一个公平的观点。我现在已经评论了那部分。我还注释掉了所有未包含在文件中的部分,并确保所有详细信息的顺序相同。我仍然有问题...正在下载 php 文件?不知道从这里去哪里??我已经在我的所有日​​志上打开了调试日志记录,并且没有任何与找不到文件或脚本错误有关的事情......我要重新启动服务器......只是为了它!
  • @DaveM - 例如,您可以将重现问题的项目的最小版本放在 github 上吗?包括那些 nginx 配置。否则很难看到。也许我或某人会尝试在本地复制,然后可能会出现修复。
  • 仅供参考...我关闭了 nginx,安装了 apache 和 libapache-mod-php,导航到我的 php 页面,然后 .... 它可以工作了!我完全糊涂了!老实说,我正处于开始质疑服务器架构的地步!
猜你喜欢
  • 2020-05-06
  • 2019-08-09
  • 2017-06-05
  • 2020-05-04
  • 2015-04-20
  • 2021-04-02
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多