[ecs, laravel, nginx] 로컬에서 nginx를 통해 laravel 화면이 나오도록 설정되어 있지만 왜 ecs에서 작동하지 않았던 이야기

3969 단어 nginx라라벨ECS

소개



이번 내용은 기술적인 이야기라기 보다는 이런 일이 원인으로 잘 안 됐다는 내용이 되어 있어 기사의 간은 원인 발견에 이르는 사고 부분이 되고 있습니다.
그러므로 지금 대답을 원하는 분에게는 적합하지 않은 내용이므로, 미리 양해 바랍니다 m (_ _) m

어떤 화면이 나왔습니까?



공용 IP에 연결할 때의 화면





Laravel 화면이 나오지 않습니다. . .

cloudwatch





에러 로그 토하지 않았다. . .

원인 발견까지의 사고



nginx는 기동하고 있고, 원래 로컬에서는 움직이고 있었다.

라는 것은, 로컬과 프로덕션 환경에서 다른 아래의 파일을 조사하면 좋을까.
  • docker-compose.ymlecs-task-definition-for-web.json(タスク定義のjsonファイル)
  • nginx/default.conf(ローカル)nginx/ecs/conf.d/default.conf(本番)

  • 우선 알기 쉬운 분으로부터 하는 것으로 nginx/ecs/conf.d/default.conf(本番) 의 내용을 nginx/default.conf(ローカル) 에 붙여 로컬로 움직일까 시험해 보자.

    응? 움직이지 않니? 아, 터미널에서 500 에러가 나온다. . .

    그럼 nginx/ecs/conf.d/default.conf(本番) 가 나쁘다!

    원인



    바로 nginx/ecs/conf.d/default.conf(本番) 파일을 보면, 미스 터치로 이상한 개행이 들어 있었다.

    nginx/ecs/conf.d/default.conf(프로덕션)


    upstream php-fpm {
      server localhost:9000;
    }
    
    server {
      listen 80;
      server_name localhost; 
      root /var/www/html/public;
    
      add_header X-Frame-Options "SAMEORIGIN"; 
      add_header X-XSS-Protection "1; mode=block"; 
      add_header X-Content-Type-Options "nosniff";
    
      index index.php;
    
      charset utf-8;
    
      location / {
        try_files $uri $uri/ /index.php?$query_string;
      }
    
      location = /favicon.ico { 
        access_log off; log_not_found off;
      }
    
      location = /robots.txt { 
        access_log off; log_not_found off;
      }
    
      error_page 404 /index.php;
    
      location ~ \.php$ {
        fastcgi_pass php-fpm;
        fastcgi_index index.php;
    
    #↓の記述で変な改行をしてしまっていた
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_scr
    ipt_name;
        include fastcgi_params;
      }
    
      location ~ /\.(?!well-known).* {
        deny all; 
      }
    }
    

    해결책



    불필요한 줄 바꿈을 제거 성공! ...라고는 가지 않았다.
    왜냐하면 수정 내용을 실전을 반영시켜야 하기 때문이다.
    그래서 아래의 7가지 절차를 거쳐 해결까지 이어질 수 있었다.
  • ファイルの修正 (개행 삭제)
  • 로컬로 이미지 생성 ( docker-compose build )
  • ecr에 대한 태그가 지정된 이미지 만들기 (docker tag nginx:latest xxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/nginx:latest)
  • ecr에 로그인 ( aws ecr get-login-password | docker login --username AWS --password-stdin https://xxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com )
  • ecr로 푸시 ( docker push xxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/nginx:latest )
  • 태스크 정의의 갱신 (잊어 버리기 쉽다. 필자도 파일 수정 후에 간과해 밟은 순서. 명령은 aws ecs register-task-definition --cli-input-json file://ecs-task-definition-for-web.json )
  • 서비스 작성 (아래 명령. 인프라 구축 모든 조합 명령이므로 과연 길다)
  • aws ecs create-service \
    --cluster xxxx-ecs --service-name xxxx-service --task-definition xxxx-for-web:2 --launch-type "FARGATE" \
    --load-balancers '[{"containerName":"nginx","containerPort":80,"targetGroupArn":"arn:aws:elasticloadbalancing:ap-northeast-1:xxxxxxxx:targetgroup/xxxx-targetgroup/6918a2b6af9b9004"}]' \
    --desired-count 2 \
    --network-configuration "awsvpcConfiguration={subnets=[subnet-xxxxxxx,subnet-xxxxxxxx],securityGroups=[sg-xxxxxxxxx],assignPublicIp=ENABLED}"
    

    해결 후 화면



    제대로 larabel 문자를 배울 수 있었다. 여기까지 길었다. . .

    좋은 웹페이지 즐겨찾기