nginx 로 proxy 서버 운영시에 trailing slash 문제 > 개발

본문 바로가기
사이트 내 전체검색

개발

nginx 로 proxy 서버 운영시에 trailing slash 문제

페이지 정보

profile_image
작성자 관리자 (119.♡.119.69)
댓글 0건 조회 31회 작성일 24-06-23 14:13

본문

nginx 로 proxy 서버 운영시에 trailing slash 문제


## 상황

nginx 로 프록시 서버를 아래처럼 설정해서 웹서버를 운영하고 있다.
```
upstream backend {
127.0.0.1:8080;
}
server {
listen 80;
server_name domain.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
```


## 현상

url 이 폴더인데 마지막에 '/' 를 붙이지 않으면,
upsteam 의 포트가 노출이 되는 현상이 발생한다.

예를 들면,
http://domain.com/gnuboard5  를 호출했을 때, http://domain.com:8080/gnuboard5 로 나온다.

이때, 8080 포트가 방화벽에서 열려 있지 않으면, 당연하게도 접속 오류가 난다.

그누보드5 의 goto_url() 함수에서 해당 현상이 발생하는데,
G5_URL 의 값이 '/gnuboard5' 처럼 마지막에 '/' 가 없는 경우에 발생한다.



## 해결

trailing slash 와 관련된 현상으로 보이며, 폴더일 경우에 폴더임을 명시해 주면 된다.
즉, 폴더일 경우 url 끝에 '/' 를 붙인다.

위 그누보드의 예에서 보면,
G5_URL 의 값을 '/gnuboard5/' 와 같이 폴더임을 명시해 주면 오류가 발생하지 않는다.



## 참고

upstream 설정에서 주소 뒤에 '/' 를 붙여 보았으나,
```
upstream backend {
127.0.0.1:8080/;
}
```
아래와 같은 오류가 난다.
```
nginx: [emerg] invalid host in upstream "127.0.0.1:8080/" in ....
```

이 오류는 proxy_pass 쪽에서 뒤에 '/' 를 붙여서 해결 할 수도 있는데,
```
server {
listen 80;
location / {
proxy_pass http://backend/;
}
}
```
그런데, 이걸로 근본적인 문제인 trailing slash 문제가 해결 되지는 않는다.



## 참고

https://ohgyun.com/621
https://sculove.github.io/post/nginx-reverse-proxy/

참고로, location 에 폴더가 들어갈때 끝에 '/' 를 붙이냐 마냐의 문제가 있는데,
이 경우에 아래처럼 붙이는 게 좋을 듯 하다.
```
....
location /folder/ {
proxy_pass http://backend/;
}
....
```
https://serverfault.com/questions/607615/using-trailing-slashes-in-nginx-configuration

추천0

댓글목록

등록된 댓글이 없습니다.

Total 392건 1 페이지
  • RSS
개발 목록
번호 제목 조회 추천 날짜
39219006-23
열람중32006-23
39033006-20
38982006-15
388153006-15
387162005-27
386638004-07
385656011-04
384702012-03
383778011-26
3821057012-10
3811326009-08
3801343012-15
3791358001-09
3781370004-12
3771429007-03
3761449002-02
3751450004-10
3741497007-27
3731597008-11

검색


사이트 정보

Copyright © Baragi.Net. All rights reserved.