[AWS EC2] nginx 및 php-fpm 주위에서 오류가 발생할 경우 해결 방법
이 기사는 프로그래밍 학자의 비망록을 처음 다루는 기사이며, 동시에 다른 초보자들에게 조금이나마 도움이 되었으면 좋겠다고 생각합니다.
이번에는 EC2입니다.×Nginx×php-fpm×라벨 개발에서는 브라우저에 접속
http://EC2インスタンスのパブリックIPアドレス/login
한 뒤 로그인 화면 표시는 성공했지만 사용자 로그인을 수행할 때 404Not Fond가 뜨는 등 고민이 많았기 때문에 해결되기 전에 시도한 것을 기록하고 싶었다.만약 무슨 잘못이 있으면 지적해 주세요.
잘못된 내용
브라우저에 연결
http://EC2インスタンスのパブリックIPアドレス/login
한 후 Laavel 응용 프로그램의 로그인 화면이 성공적으로 표시되었지만 사용자 등록을 실행할 때404 Not Found
표시되어 사용자 등록이 실패했습니다.앞으로는 같은 실수에 시달리지 않도록 해결하기 전에 시도한 일을 기록하고 싶다.
1. php-fpm와nginx의 연결 확인
문서 경로
/usr/share/nginx/html/
에서 phpinfo.php 테스트 파일을 추가하여 PHP Version에 대한 자세한 화면이 표시되는지 테스트합니다.다음 명령을 실행하면 문서 루트에서 php를 실행할 수 있는지 확인합니다.
# ec2-userでphpinfo.phpをvi起動で作成
[ec2-user@ip-###-##-##-## ~]$ sudo vi /usr/share/nginx/html/phpinfo.php
# vi起動後、/usr/share/nginx/html/phpinfo.php上で下記のコードを入力、保存
<?php phpinfo(); ?>
브라우저를 통해 연결 http://EC2のパブリックIPアドレス/phpinfo.php
연결 후 PHPVersion의 상세한 화면이 나타나면 php-fpm와nginx의 연결이 성공합니다.오류가 발생하면
/etc/nginx/nginx.conf
및 /etc/php-fpm.d/www.conf
설정을 다시 확인하십시오.2. 실행 사용자 확인
/etc/php-fpm.d/www.conf
Laavel 응용 프로그램을 시작할 때 수영장의 사용자와 그룹을 실행 사용자로 변경하여 권한 문제로 인해 발생하는 것을 방지해야 한다.이동할 Laavel 응용 프로그램이 EC2 인스턴스의 실행 사용자 홈 디렉토리 아래에 설치되어 있는지 확인하고 상황에 따라 EC2 인스턴스의 실행 사용자 이름으로 변경합니다.
/etc/php-fpm.d/www.conf
# 略
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = 実行ユーザー名(nginx) ; #========この行をapacheから実行ユーザー名に変更します
; RPM: Keep a group allowed to write in log dir.
group = 実行ユーザー名(nginx) ; #========この行をapacheから実行ユーザー名に変更します
3. php-fpm와nginx의 통신방법 설정 확인TCP 또는 UNIX 도메인 네임플러그를 통해 통신하는지 확인해야 합니다.
php-fpm 측의 설정에서
/etc/php-fpm.d/www.confのユーザーとグループ
에서 통신 방법을 정의했고 TCP나 UNIX 필드 플러그인을 확인하고 경로 내용을 /etc/php-fpm.d/www.confのlistenディレクティブ
와 일치시켜야 한다.다음과 같이 UNIX 도메인 플러그
nginx.confファイルのfastcgi_pass
를 사용하는 경우nginx입니다.conf 파일의 listen = /run/php-fpm/www.sock
에 fastcgi_pass
를 지정해야 합니다.※ TCP의 경우 listen = 127..0.1:9000
/etc/php-fpm.d/www.conf
; The address on which to accept FastCGI requests.
; Valid syntaxes are:
; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on
; a specific port;
; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
; a specific port;
; 'port' - to listen on a TCP socket to all addresses
; (IPv6 and IPv4-mapped) on a specific port;
; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /run/php-fpm/www.sock #=======TCPかUNIXドメインソケットを確認する
UNIX 도메인 플러그의 경우 다음과 같이 nginx입니다.conf 파일의 unix:/run/php-fpm/www.sock
에 fastcgi_pass
를 지정합니다./etc/nginx/nginx.conf
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
# 略
}
4.unix:/run/php-fpm/www.sock
의listen.창 변경 여부 확인 등php-fpm와nginx의 통신 방법 중 UNIX역 플러그를 사용할 때 변경
/etc/php-fpm.d/www.conf
등이 필요하며, 변경이 없으면 php-fpm를 변경해야 한다.sock의 권한은nginx를 읽을 수 없습니다.다음과 같은 변경을 통해 php-fpm.sock의 모든 사용자 그룹이 변경되면nginx와 연결할 수 있는 상태가 됩니다.
/etc/php-fpm.d/www.conf
; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server.
; Default Values: user and group are set as the running user
; mode is set to 0660
listen.owner = ユーザー名(nginx) #=====セミコロン(;)を消して実行ユーザー名(nginx)に変更します
listen.group = ユーザー名(nginx) #=====セミコロン(;)を消して実行ユーザー名(nginx)に変更します
listen.mode = 0660 #=====セミコロン(;)を消します
listen.owner
listen.owner와listen.그룹에서 UNIX 도메인 소켓을 사용할 때 소켓의 소유자/조합을 지정합니다.웹 서버에서 요청을 수락하려면 웹 서버가 소켓을 읽고 쓸 수 있는 상태가 필요합니다.
5. 확인
補足
의 설정여기서는 주로 php-fpm와의 협업을 통해 중요한 부분을 확인한다.
확인해야 할 부분은 다음과 같다.
・루트: 문서 루트의 지정이 잘못되었는지 확인합니다.
・ location: 요구 사항을 설정했는지 확인합니다
/etc/nginx/nginx.conf
.다음
location / {処理}
의 처리 내용은 다음과 같습니다.· 요청한 URI에 파일
try_files $uri $uri/ /index.php?$query_string;
이 있는지 확인하는 부분)· 파일이 없으면 요청한 URI에 디렉터리(
$uri
의 부분이 있는지 확인합니다• 디렉토리가 없는 경우 index.php 내부로 리셋
그렇습니다.
・location~.확장자가 php인 파일의 처리를 확인하십시오.
・location에 루트 매개변수가 기술되어 있는지 확인합니다.
・fastcgi패스가 올바르게 지정되었는지 확인합니다.UNIX 도메인 플러그의 경우
$uri/
또는 unix:/run/php-fpm/www.sock
가 지정되었는지 확인합니다.TCP의 경우 unix:/var/run/php-fpm/www.sock
로 지정합니다.・fastcgiparam이 올바르게 지정되었는지 확인하십시오.
fastcgi_pass= 127.0.0.1:9000
를 문서 경로에 설정하려면 index.php
로 지정해야 합니다./etc/nginx/nginx.conf
# 略
root /home/実行ユーザー名/特定のディレクトリ/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
끝맺다나의 경우 상기 5개 지역,
SCRIPT_FILENAME $document_root$fastcgi_script_name;
의listen의 값과 /etc/php-fpm.d/www.conf
의fastcgi를 시험해 봤다.pass의 값이 일치하지 않기 때문에 오류가 발생했습니다.이 기사가 조금이라도 도움이 된다면 나는 매우 기쁠 것이다.
참고 문헌
nginx docs
Laravel 6.프로그램 설계
PHP docs FastCGI Process Manager (FPM)
Reference
이 문제에 관하여([AWS EC2] nginx 및 php-fpm 주위에서 오류가 발생할 경우 해결 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kouki_o9/items/ff013189cd7d1db10811텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)