[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.confLaavel 응용 프로그램을 시작할 때 수영장의 사용자와 그룹을 실행 사용자로 변경하여 권한 문제로 인해 발생하는 것을 방지해야 한다.
이동할 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.sockfastcgi_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.sockfastcgi_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.ownerlisten.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)

좋은 웹페이지 즐겨찾기