내 개발서버인 라즈베리파이에는 2가지 서비스가 등록되어있다. 하나는 code-server라는 IDE, 하나는 내가 만들 앱이 배포되는 공간. 항상 앱을 만들고 포트를 열어주는게 번거로워서, nginx를 통해 설정하려는데 쉽지 않았다.
nginx는 현재 Https 포워딩을 위한 ssl 인증서가 탑재되어있고, 80번 포트로 응답이 오면 https로 승격한다.
아래의 예시는 Django에서 /app루트라는 하위 디렉토리를 8000번 포트에 리다이렉트하는 코드이다.
upstream code-server {
server 192.168.0.9:8888;
}
map $remote_addr $internal_request {
default 0;
192.168.0.9/24 1;
}
server {
client_max_body_size 10M; #엡서버 업로드 용량 확정
location / {
proxy_pass http://192.168.0.9:8888;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Host $host;
proxy_set_header Accept-Encoding gzip;
}
location /app/ {
rewrite ^/app(/.*)$ $1 break;
proxy_pass http://192.168.0.9:8000;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Host $host;
proxy_set_header Accept-Encoding gzip;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect default;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/[my_site]/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/[my_site]/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 = [my_site]) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 ;
listen [::]:80 ;
server_name [my_site];
return 404; # managed by Certbot
}
rewrite를 통해 /app/뒤의 파라미터를 추출하고, redirect하면서 해당 파라미터를 8000번에 서비스하고 있는 앱에 넘겨준다.