웹 사이트를 들어가보니, 갑자기 Welcome to Nginx! 페이지가 뜨더니 다른 페이지들은 404 오류가 발생했다.
분명 Nginx의 설정이 잘못 되어 있을 거라 판단한 나는 /etc/nginx/sites-available/default 코드를 확인했다.
server {
server_name gabean.kr;
location / {
proxy_pass <http://127.0.0.1:8000>;
proxy_set_header Host $host;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/gabean.kr/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/gabean.kr/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
listen 80;
server_name www.gabean.kr;
location / {
proxy_pass <http://127.0.0.1:8000>;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name m.gabean.kr;
return 301 <https://gabean.kr/m$request_uri>;
}
server {
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/gabean.kr/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/gabean.kr/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
server_name m.gabean.kr;
return 301 <https://gabean.kr/m$request_uri>;
}
server {
listen 80;
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/gabean.kr/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/gabean.kr/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
server_name gabean.kr www.gabean.kr;
location / {
if ($http_user_agent ~* "iPhone|ipad|Android|Windows CE|BlackBerry|Symbian|Windows Phone|webOS|Opera Mini|Opera Mobi|POLARIS|IEMobile|lgtelecom|nokia|SonyEricsson/i|LG|SAMSUNG|Samsung") {
rewrite ^ <https://gabean.kr/m$request_uri>? permanent;
}
}
}
server {
if ($host = gabean.kr) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name gabean.kr;
return 404; # managed by Certbot
}
확인해보니 여러 내용이 서로 중복되어 있어 오류를 발생시킨다고 판단하여 코드를 간략화 해보기로 했다.
server {
listen 80;
server_name gabean.kr www.gabean.kr;
return 301 https://$host$request_uri;
}
server {
listen 80;
server_name m.gabean.kr;
return 301 <https://gabean.kr/m$request_uri>;
}
server {
listen 443 ssl;
server_name gabean.kr www.gabean.kr;
ssl_certificate /etc/letsencrypt/live/gabean.kr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/gabean.kr/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
if ($http_user_agent ~* "iPhone|ipad|Android|Windows CE|BlackBerry|Symbian|Windows Phone|webOS|Opera Mini|Opera Mobi|POLARIS|IEMobile|lgtelecom|nokia|SonyEricsson/i|LG|SAMSUNG|Samsung") {
rewrite ^ <https://gabean.kr/m$request_uri>? permanent;
}
proxy_pass <http://127.0.0.1:8000>;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 443 ssl;
server_name m.gabean.kr;
ssl_certificate /etc/letsencrypt/live/gabean.kr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/gabean.kr/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
return 301 <https://gabean.kr/m$request_uri>;
}
이렇게 코드를 수정함으로써 gabean.kr
및 www.gabean.kr
에 대한 HTTP 요청을 모두 HTTPS로 리디렉션하고, 모바일 사용자에 대한 요청을 모바일 서브 도메인으로 리디렉션한다.
또한, m.gabean.kr
에 대한 요청은 모두 메인 사이트의 /m
경로로 리디렉션한다.
교수님에게 홍보를 부탁드려서 딱 보여드려야 하는 타이밍에 이런 오류가 발생하여 놀랬지만 5분 정도의 시간 안에 해결을 완료했다.
갑자기 모바일로 접속 시 이런 에러가 발생했다
또한 모바일로 접속시
https://gabean.kr/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m/m 이렇게 되는 무한 리다이렉션 오류가 발생했다.
현재 코드를 다시 살펴보니 /m 작동을 Nginx에서 한 번, home.html에서 한 번 작동하도록 설정 되어 있었다.