현재 Nginx 설정으로 인해서 ip로 접근하면 Nginx 404 에러로 나온다.
나는 이 view가 마음에 들지 않아서 내 개인적인 커스텀 html으로 반환하면서 다시 한번 Nginx 설정을 확인해보려고 한다.
server {
server_name {도메인};
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /.well-known/acme-challenge/ {
root /var/www/html; # 인증 파일이 저장될 경로
try_files $uri =404;
}
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
}
내가 설정을 위와 같이해서 어느 경로든 IP 접근은 404 Not Found만을 반환한다.
보안적으로 어떤 방법이 좋을지 실제 현업에서는 어떻게 하는지 모르겠으나 현재 IP 접근은 http로만 가능하기 때문에 IP 접근은 swagger 문서 빼고 막으려고 한다.
sudo mkdir -p /usr/share/nginx/html
sudo nano /usr/share/nginx/html/403.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>403 Forbidden</title>
<style>
body { text-align: center; margin-top: 50px; font-family: Arial, sans-serif; }
h1 { color: #ff6347; }
p { color: #333; }
</style>
</head>
<body>
<h1>403 Forbidden</h1>
<p>죄송합니다. 이 페이지에 대한 접근이 제한되었습니다.</p>
</body>
</html>
# HTTP 접근 (IP 및 도메인)
server {
listen 80;
server_name {도메인} {IP};
# 도메인 접근 시 HTTPS로 리다이렉트
if ($host = {도메인}) {
return 301 https://$host$request_uri;
}
# IP 접근에서 Swagger 문서만 허용
location /swagger-ui/index.html {
proxy_pass http://127.0.0.1:8080/swagger-ui/index.html;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 나머지 경로 차단 (IP 접근 시)
location / {
if ($host = {IP}) {
return 403; # Forbidden
}
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 사용자 정의 403 페이지
error_page 403 /403.html;
location = /403.html {
root /usr/share/nginx/html;
internal;
}
}
# HTTPS 설정 (도메인 접근만 허용)
server {
listen 443 ssl;
server_name {도메인};
# SSL 설정
ssl_certificate /etc/letsencrypt/live/{도메인}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/{도메인}/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
# 모든 요청을 Spring Boot로 전달
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Certbot 인증 파일 경로
location /.well-known/acme-challenge/ {
root /var/www/html;
try_files $uri =404;
}
}
참고로 conf파일 수정 후 Ctrl + X 누른 뒤 Y을 누르고 Enter를 누르면 수정 반영 된다.
설정 변경 뒤 다음과 같이 입력해서 재시작시킨다.
sudo nginx -t
sudo systemctl restart nginx