웹 사이트를 들어가보니, 갑자기 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.krwww.gabean.kr에 대한 HTTP 요청을 모두 HTTPS로 리디렉션하고, 모바일 사용자에 대한 요청을 모바일 서브 도메인으로 리디렉션한다.

또한, m.gabean.kr에 대한 요청은 모두 메인 사이트의 /m 경로로 리디렉션한다.

교수님에게 홍보를 부탁드려서 딱 보여드려야 하는 타이밍에 이런 오류가 발생하여 놀랬지만 5분 정도의 시간 안에 해결을 완료했다.

++ 500 internal server error

갑자기 모바일로 접속 시 이런 에러가 발생했다

또한 모바일로 접속시

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에서 한 번 작동하도록 설정 되어 있었다.