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
이 됐어요이것은 저에게 도움이 되었습니다.
- 집
/etc/php5/fpm/pool.d/www.conf
listen = /var/run/php5-fpm.sock
listen = 127.0.0.1:9000
- nginx.conf에 위치가 올바르게 설정되어 있는지 확인합니다.
- 려달을 합니다.
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
'programing' 카테고리의 다른 글
Android: 프로그래밍 방식으로 보기 스타일 설정 (0) | 2023.08.08 |
---|---|
테이블에서 두 개의 날짜 시간을 요청하지만 하나만 받는 경우 (0) | 2023.08.08 |
Ruby on Rails 원격 확인 중: 실제 콜백 (0) | 2023.08.08 |
PowerShell - 조건부 연산자 (0) | 2023.08.08 |
대량 수집이 있는 테이블 함수가 잘못된 데이터 유형을 슬로우함 (0) | 2023.08.08 |