简体   繁体   中英

Cannot get PHP to serve on Nginx -- Error 502 Bad Gateway

I'm fairly new to nginx and assumed it would be very straightforward to serve php with it since that setup is so common, but it seems like it's much more complex than I anticipated.

Here's my config..

    server {
            listen 80;
            server_name domain.com www.domain.com;

            location / {
                    root   /srv/www/domain.com/public_html;
                    index index.php;
            }

    # serve static files directly
    #location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$
    #    access_log        off;
    #    expires           30d;

            location ~ [^/]\.php(/|$) {
                    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
                    if (!-f $document_root$fastcgi_script_name) {
                            return 404;
                    }

                    fastcgi_pass /var/run/php5-fpm.sock;
                    fastcgi_index index.php;
                    include fastcgi_params;
            }
    }

If I replace the "index.php" with a "index.html" file, nginx serves up the html perfectly. But switching over to php causes a 502 error.

I've seen guides that recommend modifying anything from iptables to php-fpm to the php.ini, to fast-cgi to sites-available..?

I'm not sure what many of these tutorials are trying to do exactly... for now I'd just like my index.php to serve up phpinfo(). What's the next step?

Is there a clear guide that goes over the various options available for serving php with nginx?

您必须安装php-fpm并添加此部分: http//wiki.nginx.org/PHPFcgiExample

I assume you have successfully installed php-fpm (FastCGI Process Manager)

Go to php-fpm/php.ini

Find the line cgi.fix_pathinfo=1 , uncomment it and change the value 1 to 0 .

cgi.fix_pathinfo=0

Now restart php-fpm service.

Through your terminal

service php5-fpm restart (I'm not sure about your Linux distro must be same)

This might be the issue with the permission, you can identify the error in the log file

  • Extract the record from the log

    022/08/09 20:37:27 [crit] 3930#0: *17 connect() to unix:/var/run/php/php-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 192.168.80.36, server: 127.0.0.1, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php-fpm.sock:", host: "127.0.0.1"

This give clue that server conflict, now to verify which user running we need to check the php-fpm and nginx worker node

  • Worker Node Execute the command ps aux | grep 'nginx' ps aux | grep 'nginx' this will indicate the user of the nginx worker node, in this case it is nobody

    root@ubuntu:/var/nginx/html# ps aux | grep 'nginx'

  • nobody 3930 0.0 0.0 37636 3784? S 20:37 0:00 nginx: worker process

  • Check the php fpm service Execute the command ps aux | grep 'php-fpm' ps aux | grep 'php-fpm' It will indicate the user as "www-data" in my case

    root@ubuntu:/var/nginx/html# ps aux | grep 'php'

  • www-data 1320 0.0 0.2 498796 11908? S 19:34 0:00 php-fpm: pool www

  • www-data 1323 0.0 0.2 498796 11908? S 19:34 0:00 php-fpm: pool www

To resolve this conflict, in the nginx.conf file, you have to define the user derivate at top to be www-data ie user www-data;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM