Q&A

책을 따라하다가 막히는 부분이 있나요?
질문을 남겨주세요.

nginx.conf 부분을 만져보다가 궁금점이 생겨서 질문 드립니다.

3 years, 3 months ago

mdevl mdevl
upstream do_it_django {
server web:8000;
}

server {
listen 80;
location /django/ {
proxy_pass http://do_it_django;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}

location /static/ {
alias /usr/src/app/_static/;
}

location /media/ {
alias /usr/src/app/_media/;
}
}


안녕하세요.

/ 접근주소에대한 부분을 /django/ 처럼 다른 경로로 해보고 싶어서 혼자 다른 막 바꿔보다가 잘 안돼서요..

잘 안돼서 혼자 막 하다가 기진맥진 한 상태입니다.

로컬환경에서는 설정 하는 방법이 다른건지 아닌지만 알면 검색 범위가 좁혀질 것 같아서 질문 올리게 됐습니다.

검색 키워드가 좁혀지질 않아서요..


jinioji
jinioji   3 years, 3 months ago

도움이 되실지 모르겠지만 제 설정 파일 올려드립니다.

docker-compose.dev.yml

version: '3'

services:
nginx:
build: ./nginx
environment:
- TZ=Asia/Seoul
volumes:
- static_volume:/usr/src/app/_static
- media_volume:/usr/src/app/_media
ports:
- 80:80
depends_on:
- web
web:
build: .
environment:
- TZ=Asia/Seoul
command: python manage.py runserver 0.0.0.0:8000
command: gunicorn do_it_django_prj.wsgi:application --bind 0.0.0.0:8000
volumes:
- static_volume:/usr/src/app/_static
- media_volume:/usr/src/app/_media
- ./:/usr/src/app/
expose:
- 8000
env_file:
- ./.env.dev
depends_on:
- db
db:
image: postgres:12.0-alpine
ports:
- 5432:5432
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- TZ=Asia/Seoul
- PGTZ=Asia/Seoul
- POSTGRES_USER=do_it_django_db_user
- POSTGRES_PASSWORD=do_it_django_db_password
- POSTGRES_DB=do_it_django_dev
volumes:
postgres_data:
static_volume:
media_volume:


nginx.conf 파일은 올려주신 내용과 같습니다.

【도커 실행 명령어】

docker-compose -f docker-compose.dev.yml up


도움이 되셨길 바랍니다.

Updated: July 8, 2021, 11:40 p.m.

mdevl
mdevl   3 years, 3 months ago

jinioji 님 답글 감사드립니다! 
저도 지금 따라해보긴 했는데 그래도 nginx.conf에서 로케이션 부분을 /django/로 바꾸니까 적용이 안되는 것 같아요. 다시 /로 바꾸면 다시 잘 작동하고.. 제 설명이 짧았지만 저도 일단은 잘 작동 하고 있는데 단지 접속url을 localhost 에서 localhost/django 이렇게 바꿔보고싶었던거인데 잘 안되네요..

Updated: July 9, 2021, 9:58 a.m.

jinioji
jinioji   3 years, 3 months ago

mdevl 님


제가 질문을 잘 이해를 못 했네요... 죄송합니다.

도큐먼트 루트를 /에서 /django/로 변경하고 싶으시다는 말씀이시죠?


nginx.conf에 아래와 같이 server_name을 설정할 수 있는 것 같습니다.

그렇다면 server_name쪽을 localhost/django로 설정하면 원하시는 설정이 가능하지 않을까 생각되네요...

저도 해본 건 아니라서 정확하진 않습니다.


server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://do_it_django;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}

location /static/ {
alias /usr/src/app/_static/;
}

location /media/ {
alias /usr/src/app/_media/;
}
}


도움이 되셨길 바랍니다.

혹시 해결하시면 댓글 달아주세요...


감사합니다.

Updated: July 9, 2021, 10:40 a.m.

mdevl
mdevl   3 years, 3 months ago

jinioji님 또 답글 감사드립니다! 제가 말씀드린 부분이 바로 그 부분입니다! location / 라고 되어있는 부분을 location /django/ 라고 바꾸면 될것같은데 안됐었고..

제가 도커데스크탑에서 시도해보고있으니  server_name www.example.com 부분에 넣을 도메인이 없어서 혹시 안되는건가 싶어서 혹시 로컬에서는 제가 원하는 기능이 안되는것인지 알아보고자 남긴 글이었습니다.

검색을 하면 할수록 더욱 혼란스러워지고 산으로 가더라고요.. 정말 단순한거라고 생각했는데 이렇게 고생할줄 몰랐거든요.


답변해주신대로 localhost/django 로 해보면 될 수 있을 것 같다는 생각이 들어서 흥분되네요. 

빨리 해보겠습니다.!

답글 완전 감사드립니다! 





Updated: July 9, 2021, 4:48 p.m.

taegon
taegon   3 years, 3 months ago

안녕하세요. 답변이 늦었습니다.

짧게 답변드리자면, 아래와 같이 proxy_pass 에 마지막에 /를 추가하시면 동작이 되실 겁니다.

proxy_pass http://do_it_django/;

접근한 url를 프록시로 전달해주는 방식이기 때문에 당연히 동작해야 하구요.

문제는 이렇게 포워딩을 하시더라도, 장고 내부에서는 프로젝트 url를 바꾸지 않아서 다시 /django/가 추가되지 않은 주소로 이동하게 될겁니다. django 프로젝트 내부에도 url를 함께 고쳐주셔야 합니다.

정리하자면, 시도하시는 방법대로 진행을 하시면,
nginx에서는 80번 포트로 접근하는 경우 /django/가 붙으면 이걸 장고로 포워딩됩니다.
하지만 장고에서 메뉴를 이동하거나, 블로그에 글을 올리는등, 다른 페이지로 옮길 때는 지정된 url이 /django/를 포함하고 있지 않아, 다시 localhost/blog와 같이 접근하게 됩니다. 이 부분도 같이 고쳐주셔야 정상적으로 동작할 것입니다.

고맙습니다.

Updated: July 15, 2021, 2:28 p.m.

taegon
taegon   3 years, 3 months ago

그리고 nginx.conf 파일을 수정하신 이후에는 nginx 컨테이너 이미지를 다시 빌드해주셔야, 변경된 사항이 적용이 됩니다.

docker-compose build --no-cache nginx

와 같이 실행하시면, nginx 이미지를 다시 빌드합니다.

고맙습니다.

Updated: July 15, 2021, 2:30 p.m.

mdevl
mdevl   3 years, 3 months ago

taegon 작가님 감사드립니다! 잘 이해 했습니다!

Updated: July 17, 2021, 1:26 p.m.

Leave a Comment:
목록보기
Search
  • 자유게시판
  • Q&A