programing

nginx 502 잘못된 게이트웨이

testmans 2023. 8. 8. 20:07
반응형

nginx 502 잘못된 게이트웨이

pphp5-cgi를 생성하기 위해 sn fcgi를 사용할 때 nginx가 포함된 502 Bad Gateway가 표시됩니다.

rc.local의 다음 행을 사용하여 서버 시작 시 인스턴스를 확장하는 데 사용합니다.

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid

아마도 saen-fcgi / php5-cgi가 죽고 php를 구문 분석하기 위해 더 이상 듣는 것이 없기 때문에 오류가 발생하고 있을 것입니다.

로그에 아무 곳에서나 볼 수 있는 내용이 없습니다. 아이디어가 부족합니다(그리고 nginx의 이 설정은 처음입니다).

는 나의 실다니를 했습니다.localhost그리고 페이지는 표시했습니다.502 bad gateway이 됐어요이것은 저에게 도움이 되었습니다.

  1. /etc/php5/fpm/pool.d/www.conf
  2. listen = /var/run/php5-fpm.socklisten = 127.0.0.1:9000
  3. nginx.conf에 위치가 올바르게 설정되어 있는지 확인합니다.
  4. 려달을 합니다.sudo service php5-fpm restart

아마 도움이 될 거예요.

출처: http://wildlyinaccurate.com/solving-502-bad-gateway-with-nginx-php-fpm

nginx가 php5-cgi로 전달할 수 없기 때문에 502 오류가 나타납니다.tcp와 반대로 php5-cgi를 재구성하여 유닉스 소켓을 사용할 수 있습니다.그런 다음 tcp 대신 소켓을 가리키도록 서버 구성을 조정합니다...

ps auxww | grep php5-cgi #-- is the process running?  
netstat -an | grep 9000 # is the port open? 

에 가다/etc/php5/fpm/pool.d/www.conf 소켓을 이 이 주석이 에는 소을사중나이주라없경우는이석에인켓용이거▁and▁is경.

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

몇 가지 다른 값도 설정합니다.

listen.owner = www-data
listen.group = www-data
listen.mode = 0660

php-fpm과 nginx를 다시 시작하는 것을 잊지 마세요.동일한 nginx 소유자 및 그룹 이름을 사용하고 있는지 확인합니다.

소켓이나 TCP를 통해 통신하려면 PHP-FPM과 Nginx의 설정을 일치시켜야 합니다.

그니깐으로 ./etc/php5/fpm/pool.d/www.conf다음 행을 찾습니다.

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

그럼 다음으로 이동/etc/nginx/nginx.conf

다음 항목을 찾습니다.

upstream php {
    server unix:/var/run/php5-fpm.socket;
}

이 값들과 일치하면 모든 설정이 완료됩니다.

Linux 서버를 실행하는 경우 IPTAB가LES 구성이 올바릅니다.

실행합니다.sudo iptables -L -n열려 있는 포트 목록을 받게 됩니다.fcgi 스크립트를 제공하는 포트를 여는 Iptables 규칙이 없으면 502 오류가 표시됩니다.올바른 포트를 여는 IP 테이블 규칙은 모든 패킷을 완전히 거부하는 규칙(즉, 양식 규칙) 앞에 나열되어야 합니다."REJECT ALL -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable또는 유사)

구성에서 포트를 제대로 열려면 다음 명령을 실행해야 했습니다(fcgi 서버가 포트 4567에서 실행 중이라고 가정).

sudo iptables -I INPUT 1 -p tcp --dport 4567 -j ACCEPT

경고: 그러면 포트 4567이 전 세계에 공개됩니다.

따라서 다음과 같은 작업을 수행하는 것이 좋습니다.

   sudo iptables-save >> backup.iptables
   sudo iptables -D INPUT 1 #Delete the previously entered rule
   sudo iptables -I INPUT 1 -p tcp --dport 8080 -s localhost -j ACCEPT # Add new rule

이렇게 하면 502 오류가 제거됩니다.

바꾸다

fastcgi_pass    unix:/var/run/php-fpm.sock;

로.

fastcgi_pass    unix:/var/run/php5-fpm.sock;

가 가했을때 때.sudo /etc/init.d/php-fpm start다음 오류가 발생했습니다.

Starting php-fpm: [28-Mar-2013 16:18:16] ERROR: [pool www] cannot get uid for user 'apache'

그런 것 같다./etc/php-fpm.d/www.conf웹 서버가 실행 중인 사용자를 알아야 하며 nginx의 경우 실제로 nginx이고 변경해야 하는 경우 apache라고 가정해야 합니다.

다음을 사용하여 nginx가 클라이언트 중단을 무시하도록 할 수 있습니다.

location / {
  proxy_ignore_client_abort on;
}

Ubuntu 서버를 설정할 때도 같은 문제가 발생했습니다.소켓 파일에 대한 잘못된 권한으로 인해 문제가 발생했습니다.

사용 권한 문제로 인해 문제가 발생하는 경우 /etc/php5/fpm/pool.d/www.conf의 다음 행에 주석을 달 수 있습니다.

listen.owner = www-data
listen.group = www-data
listen.mode = 0660

또는 다음 명령을 사용하여 모든 그룹에 읽기 및 쓰기 권한을 부여할 수 있습니다.

sudo chmod go+rw /var/run/php5-fpm.sock

xcache 또는 apc 모듈을 사용하지 않도록 설정합니다.일부 버전에서 세션 변수에 개체를 저장하는 중에 문제가 발생한 것 같습니다.

이 팁이 다른 사람의 생명을 구할 수 있기를 바랍니다.저의 경우, 문제는 기억력이 부족하다는 것이었습니다. 하지만 아주 조금이었지만, 그것에 대해 생각하기는 어려웠습니다.3시간이나 낭비했어요.실행을 권장합니다.

sudo htop

또는

sudo free -m

...서버에서 문제가 있는 요청을 실행하여 메모리가 부족하지 않은지 확인합니다.그리고 제 경우와 같은 경우 스왑 파일을 생성해야 합니다(이미 가지고 있지 않은 경우).

이 튜토리얼에 따라 Ubuntu Server 14.04에서 스왑 파일을 생성했는데 제대로 작동했습니다. http://www.cyberciti.biz/faq/ubuntu-linux-create-add-swap-file/

Ubuntu를 사용하고 있는데 위의 모든 것이 실패한 경우 AppArmor를 비난할 가능성이 높습니다.

다음은 해결 방법에 대한 좋은 가이드입니다. https://www.digitalocean.com/community/tutorials/how-to-create-an-apparmor-profile-for-nginx-on-ubuntu-14-04

긴 이야기 요약:

vi /etc/apparmor.d/nginx

또는

sudo aa-complain nginx
sudo service nginx restart

모든 것이 잘 작동하는 것을 봅니다... 그럼.

sudo aa-logprof

Apparomor를 포함하여 가능한 모든 권한을 가지고 있음에도 불구하고 Nginx가 error.log를 읽을 수 없는 문제가 있었습니다.내 생각엔 엔트리의 순서나 PHP-Fpm과의 상호작용과 관련이 있을 것 같습니다.저는 이 문제를 해결할 시간이 부족하여 일단 Apache로 돌아갔습니다. (Apache는 FYI에서도 훨씬 더 나은 성능을 발휘합니다.)

AppArmor는 프로필만 제거하면 Nginx가 원하는 대로 할 수 있도록 합니다.

 rm /etc/apparmor.d/nginx
 service apparmor reload

놀랍게도 Nginx 오류를 수정하는 많은 게시물은 SELinux를 완전히 비활성화하거나 AppArmor를 제거하는 데 의존합니다.많은 소프트웨어로부터 보호 기능을 잃기 때문에 그것은 좋지 않은 생각입니다.Nginx 프로필을 제거하는 것이 구성 파일 문제를 해결하는 더 좋은 방법입니다.Nginx 구성 파일에 문제가 없다는 것을 알게 되면 시간을 내어 적절한 AppArmor 프로필을 만들 수 있습니다.

AppArmor 프로필이 없으면, 특히 Passman과 같은 것을 실행하면 서버에 백도어를 설치하는 데 약 한 달 정도의 시간을 줍니다.

저에게 오류는 /etc/nginx/sites-available/default에 있는 Nginx의 기본 파일에 있었습니다.

저는 사용된 php-fpm 버전이 7.0이고 제가 다운로드한 php 버전이 7.2라는 것을 알게 되었습니다. 저는 7.2로 간단하게 버전을 변경했고 작동했습니다.

fastcgi_pass unix: /var/run/sys/sys7.0-fpm.sys;

여기도 비슷한 설정이고 내 코드의 버그인 것처럼 보입니다.앱을 시작할 때 저는 문제가 되는 URL을 찾았고 이것은 효과가 있었습니다.echo '<html>test</html>'; exit();

제 경우, 문제는 특수한 상황에서만 실패한 초기화되지 않은 변수였던 것으로 밝혀졌습니다.

언급URL : https://stackoverflow.com/questions/4252368/nginx-502-bad-gateway

반응형