Znalazłem błąd OSTRZEŻENIE: [basen www] dziecko 3715 powiedziało w stderr: „BŁĄD: połączenie niedozwolone: adres IP„ x.x.x.x ”został usunięty.” ' w logu php-fpm, gdzie „x.x.x.x” jest publicznym serwerem mojego serwera.
Ponieważ „listen.allowed_clients = 127.0.0.1” jest ustawione na php-fpm, błąd jest rozsądny. Ale zastanawiam się, dlaczego nginx łączy się z php-fpm z jego publicznym ip, nginx i php-fpm są w rzeczywistości na tym samym serwerze. Czy istnieje podejście do zmiany zachowania nginx tutaj?
AKTUALIZACJA: dodano szczegółowe konfiguracje.
w nginx.conf:
user nginx; worker_processes 4; 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 65; include /etc/nginx/conf.d/*.conf; index index.html index.htm; upstream php { server 127.0.0.1:9000; } }
w /etc/nginx/conf.d/test.conf:
server { listen 443 default_server ssl; ssl_certificate /usr/share/nginx/html/xxx.crt; ssl_certificate_key /usr/share/nginx/html/xxx/xxx.key; ## Your website name goes here. server_name x.x.x; ## Your only path reference. root /usr/share/nginx/html/xxx; ## This should be in your http block and if it is, it's not needed here. include /etc/nginx/mime.types; index index.php location ~ \.php$ { #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini include fastcgi.conf; fastcgi_intercept_errors on; fastcgi_pass php; } }
w 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 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 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;
status php-fpm:
[root@test-server ~]# netstat -tulnp | grep 9000 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 4134/php-fpm: maste
w dziennikach php-fpm:
[03-Aug-2015 09:55:02] WARNING: [pool www] child 4109 said into stderr: "ERROR: Connection disallowed: IP address '1.2.3.4' has been dropped."
Na moim serwerze: nazwa_serwera 'x.x.x' naprawdę została zmieniona na '1.2.3.4' przez dns, które zastępuję moją prawdziwą nazwą serwera i publiczną ip tymi fałszywymi. Jeśli to jest mylące, przepraszam za to.
Wszystkie powyższe pliki konfiguracyjne nie były zmieniane przez długi czas. Wszystko było w porządku, dopóki nie zrestartowałem serwera. Pamiętałem, że dodałem jedną linię jako „1.2.3.4 x.x.x” w moim / etc / hosts, ale usunięcie tego nie pomogło.
Obecnie zmieniłem listen.allowed_clients w php-fpm, aby ominąć ten problem. Ale jestem ciekawy takiego zachowania nginx i php-fpm.
fastcgi_pass
dyrektywa?127.0.0.1
nie ma potrzeby korzystanialisten.allowed_clients
.Odpowiedzi:
Aby jawnie ustawić początkowy adres IP żądania, musisz użyć jednego z następujących fastcgi_bind / proxy_bind dyrektywy wraz z odpowiednią dyrektywą * _pass.
źródło