nginx 로 proxy 서버 운영시에 trailing slash 문제
페이지 정보
본문
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
## 상황
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
댓글목록
등록된 댓글이 없습니다.