해결된 질문
작성
·
311
·
수정됨
0
안녕하세요. 강의를 듣고 공부해보고 있는 개발자입니다.
일단 너무 감사하게 잘 듣고 있습니다. 이런 강의는 잘 없어서 나쁜 구조(클래스 중복, 날로 해버리는 코드)로만 유지보수를 해오고 있었었고 개선하고 싶은 생각이 많이 들었거든요. PHP에 숨겨진(잘모르는) 기능도 알아가게 되서 무한 감사합니다.
다름이 아니라 nginx 를 사용해서 쓰고 싶은데 잘 작동하지 않는 것 같아 질문드립니다.
php -S localhost:8080 -t public
커맨드를 이용했을 땐, 크게 문제가 없는 상태입니다.
한 가지 예로 nginx에 연동하면 라우팅 쪽이 원하는대로 작동되지 않습니다.
get '/call'
에서 resource/call.php
를 호출해서 echo 'call'
을 실행시키게 해두었는데
get '/call'
시, /
의 resource/index.php
내의 echo 'hello World'
가 출력이 되고 있어서 어떤 것을 확인하면 좋을지 몰라 질문드립니다.
nginx에 설정에 문제로 생각이 들긴하는데, 잘 모르겠습니다.
PHP는 8.1을 사용하고 nginx설정은 다음과 같습니다.
server {
listen 80;
listen [::]:80;
root /var/www/html/app/public;
index index.php;
server_name localhost;
error_log /var/www/html/log/nginx/error.log;
access_log /var/www/html/log/nginx/access.log;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
답변 1
1
안녕하세요. 우선, 라우팅을 먼저 확인해보는 것이 좋을 것 같습니다. /call
을 불렀을 때 index.php
가 실행되었다는 것은 일단 OK, 그 다음은 index.php
, 즉 프론트 컨트롤러에서 실행된 라우터에 의해 사용자의 요청이 /call
에 도달하여 컨트롤러가 실행되는지 확인하는 것인데, 내장 서버에서는 동작하나, 범용 웹서버에서 동작하지 않는 경우 $_SERVER
를 확인해보는 것도 방법입니다. 아래의 질문을 참고해보시기 바랍니다.
https://www.inflearn.com/questions/52447/apache%EC%97%90-%EC%98%AC%EB%A6%B4%EA%B2%BD%EC%9A%B0
위의 내용은 아파치에서 실행한 것이지만, nginx 에서도 같은 맥락으로 문제가 발생했을 수도 있습니다.
감사합니다! 라우팅 문제였네요~
첨부해주신 링크를 통해서 잘 해결했습니다.