이 nginx 인스턴스의 목표는 GitLab 및 OpenWRT Luci가 리버스 프록시를 통해 리디렉션되도록하는 것입니다. 이미이 문제에 대응하는 것으로 보이는 기본 URL이있는 다른 여러 웹 사이트에서 작동하고 있습니다.
- 이 예제의 GitLab은 포트 9000의 로컬 서버에 있습니다.
- nginx 웹 사이트는 포트 8080에 있습니다.
- OpenWRT는 똑같은 문제가 있지만 / cgi-bin / luci /
예제 위치에 대한 관련 nginx 구성은 다음과 같습니다.
location /gitlab/ {
proxy_pass http://127.0.0.1:9000/;
proxy_redirect default;
}
- 결과는 슬래시가 있거나없는 것과 같습니다.
이 위치에 적용되는 일부 헤더 프록시 구성 옵션이 있습니다.
# Timeout if the real server is dead
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
# Basic Proxy Config
proxy_set_header Host $host:$server_port;
proxy_set_header Origin $scheme://$host:$server_port;
proxy_set_header Connection $http_connection;
proxy_set_header Cookie $http_cookie;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Frame-Options SAMEORIGIN;
# Advanced Proxy Config
send_timeout 5m;
proxy_read_timeout 300;
proxy_send_timeout 300;
proxy_connect_timeout 300;
proxy_buffers 32 4k;
proxy_buffer_size 4k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_http_version 1.1;
proxy_cache_bypass $cookie_session;
proxy_no_cache $cookie_session;]
- #proxy_set_header Host를 주석 처리하면 대신 브라우저가
https://127.0.0.1:9000/users/sign_in
탐색 할 때 https://website.com:8080/gitlab/
;
GET /gitlab/ HTTP/1.1
Host: website.com:8080
응답이 /users/sign_in
대신에 잘못 되돌아갑니다./gitlab/users/sign_in
HTTP/1.1 302 Found
Cache-Control: no-cache
Connection: keep-alive
Content-Type: text/html; charset=utf-8
Location: https://website.com:8080/users/sign_in
https : // website : 8080 / gitlab / users / sign_in 으로 수동으로 탐색 하면 페이지가로드되지만 위와 동일한 문제가 발생할 때까지 자산이 없습니다.
nginx docs를 읽으면 기본 프록시 동작 이이 시나리오를 처리해야하지만 실패한 것으로 보입니다.
로그가별로 표시되지 않는 것 같습니다.
왜 이런 일이 발생하는지 진단하는 데 도움이되는 추가 단계는 무엇입니까?