Server/Linux

[nginx] autoindex로 디렉토리 리스팅 하였을 때 cors 에러

밍글링글링 2023. 4. 10.
728x90
server {
        server_name *;

        location / {
                root /;
                autoindex on;
        }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/*/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/*/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 {
    #if ($host = *) {
    #    return 301 https://$host$request_uri;
    #} # managed by Certbot

        listen 80;
        server_name *;
        #return 404; # managed by Certbot

        location / {
                root /;
                autoindex on;
        }


}

보안적인 이슈 사항의 정보가 있기에, 유도리 있게 위와 같이 변경하였다.

 

위 내용은 nginx의 conf 파일이다. ssl 적용이 되어있는 모습인데,

ssl을 적용하고 안뜨던 cors에러가 뜬 경우이다.

 

이 경우 spring으로 컨테이너가 돌거나 햇다면, 소스 단에서 cors 에러를 처리해주었으면 좋았을려만,

nginx에서 디렉토리 리스팅을 하여서, nginx에서 처리해야하였다.

 

이 경우에는 간단하게 header를 추가하면 된다.

 

필자의 경우에는 

add_header 'Cache-Control' 'public';
add_header 'X-Frame-Options' 'ALLOW-FROM *';
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

 

' location / ' 안에 위 코드의 내용을 집어넣어서 전역에 허용하였다.

필자의 경우 root가 ' / ' 로 되었지만, 실 경로가 아니다.

 

 

전체 conf 파일의 내용은 아래와 같다.

server {
        server_name *;

        location / {
                add_header 'Cache-Control' 'public';
                add_header 'X-Frame-Options' 'ALLOW-FROM *';
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Allow-Credentials' 'true';
                add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
                root /;
                autoindex on;
        }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/*/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/*/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 {
    #if ($host = *) {
    #    return 301 https://$host$request_uri;
    #} # managed by Certbot

        listen 80;
        server_name *;
        #return 404; # managed by Certbot

        location / {
                add_header 'Cache-Control' 'public';
                add_header 'X-Frame-Options' 'ALLOW-FROM *';
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Allow-Credentials' 'true';
                add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
                root /;
                autoindex on;
        }


}
728x90

댓글