Nginx sadece php-fpm kullanan php betiklerine 404 atıyor


11

nginx+ Kullanarak bir test sunucusu yükledim php-fpm. Aşağıdakilerin hepsini denedim:

Nginx + Php5-fpm php dosyalarını oluşturmuyor

nginx + php fpm -> 404 php sayfası - dosya bulunamadı

PHP dosyalarına erişirken, nginx bir 404 hatası veriyor

Ne denediğimi özetleme:

  • Yeniden.
  • Komut dosyası ayrıcalıklarını değiştirme (olarak değiştirildi 0777).
  • fastcgi_intercept_errors on.
  • İşaretli rootseviyelerde direktifini: server, locationve location ~ \.php.
  • İşaretli fastcgi_param SCRIPT_FILENAMEdirektifini.

Sunucu 404 (ve sadece) .phpkomut dosyalarında döner . Onları yeniden adlandırabilirim .htmlve iyi olurlar. Bunu nasıl başarabilirim?

Bu benim nginx.conf:

user nginx;
worker_processes 1;

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

pid        /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;
    keepalive_timeout  2;

    include /etc/nginx/conf.d/*.conf;

    index   index.html index.htm;

    server {
        listen       80;
        server_name  _;
        root         /var/www/html;

        location / {
            root /var/www/html;
            index index.php index.html index.htm;
        }

        error_page  404              /404.html;
        location = /40x.html {
            #root /var/www/html;
        }


        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            #root /var/www/html;
        }

        location ~ \.php$ {
            root           /var/www/html;
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass   unix:/var/run/php5-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }


    }

}

Yanıtlar:


14

Çözüldü. Sorunun php'nin dinlediği soket üzerinde ayarlanan izinler olduğu ortaya çıktı. Sadece adında bir direktif değiştirmek zorunda listen.modeüzerinde/etc/php-fpm.d/www.conf

listen.mode = 0750

Ve kullanıcıyı şu şekilde ayarlayın nginx:

listen.owner = nginx
listen.group = nginx

Böylece dosya şöyle görünür:

srwxr-x---. 1 nginx nginx 0 jul  8 08:59 /var/run/php5-fpm.sock

Çünkü bir tcp portu yerine unix soketi kullanıyordum:

listen = /var/run/php5-fpm.sock;

Ayrıca, ben başlamıştı 404yerine 500ya 503benim çünkü www.confüzere yapılandırıldı yönlendirmek için hatalarını özel sayfalar ve onlar orada değildi çünkü, ben başlamıştı 404's.

Düzenle:

Fedora'daki nginx dağıtımının en son sürümlerinde (Fedora 22, 23), nginx varsayılan olarak apache kullanıcısını kullanır ve soket de kullanıcı apache'sine ayarlanır, bu nedenle başka bir yapılandırmaya gerek yoktur.


Doğru, kontrol etmelisiniz: - Hangi kullanıcı / grup nginx (veya herhangi bir web sunucusu) çalıştırın - Hangi kullanıcı / grup php-fpm çalıştırın
Dmitry Dubovitsky

0

Aslında bir "Bulunamadı" hatası aldım çünkü okuduğum bir kitap /php_statusphp-fpm 7.0.x (şu anda 7.0.19) ve nginx 1.12'de (şu anda 1.12.0) yapılandırdığım yol için yanlış eşleme dizesi verdi

İşte /etc/php/7.0/fpm/pool.d/{config}

pm.status_path = /php_status

İşte için yapılandırma olduğunu defaultin /etc/nginx/sites-available(Ben Ubuntu çıkıyorum)

server {
  listen 80 default;
  root /var/www;

  index index.html index.htm default.html;
  access_log /dev/null;
  error_log /dev/null;

  location / {
    try_files $uri $uri/ =404;
  }

  location /php_status {
    fastcgi_pass unix:/var/run/php7.0-fpm.sock;
    # fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
    include fastcgi_params;
    allow 127.0.0.1;
    deny all;
  }
}

Not: Aşağıdakiler, /php_statusinternette herkese açık olmayacak şekilde tasarlanmıştır (PHP hizmeti veya varsayılan ana bilgisayar için ayarlanmamıştır). Ayrıca fastcgi_passtcp ve unix-soket php-fpm için yönerge içerir

Ayrıca aşağıdaki iki komutu da çalıştırmalısınız.

sudo service nginx reload
sudo service php7.0-fpm restart

Doğrulamak için çalıştırmayı deneyin

curl http://127.0.0.1/php_status
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.