Tujuan dari instance nginx ini adalah untuk membuat GitLab dan OpenWRT Luci untuk mengarahkan ulang melalui proxy terbalik. Ini sudah berfungsi untuk beberapa situs web lain, semua yang memiliki url dasar yang tampaknya mengatasi masalah ini.
- GitLab dalam contoh ini ada di server lokal di port 9000.
- Situs web nginx ada di port 8080.
- OpenWRT memiliki masalah yang sama persis, tetapi dengan / cgi-bin / luci /
Konfigurasi nginx yang relevan untuk lokasi contoh adalah;
location /gitlab/ {
proxy_pass http://127.0.0.1:9000/;
proxy_redirect default;
}
- Perhatikan bahwa hasilnya sama dengan dan tanpa garis miring.
Ada beberapa opsi konfigurasi proxy header yang diterapkan ke lokasi ini.
# 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;]
- Mengomentari #proxy_set_header Host sebagai gantinya mengarahkan browser ke
https://127.0.0.1:9000/users/sign_in
Saat menjelajah ke https://website.com:8080/gitlab/
;
GET /gitlab/ HTTP/1.1
Host: website.com:8080
Respons salah kembali ke /users/sign_in
bukan/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
Menjelajahi secara manual ke https: // situs web: 8080 / gitlab / users / sign_in memuat halaman, tetapi tidak ada aset saat jatuh hingga masalah yang sama seperti di atas.
Membaca nginx docs , itu menunjukkan bahwa perilaku proxy default harus menangani skenario ini, meskipun tampaknya gagal.
Log tampaknya tidak banyak menunjukkan.
Langkah tambahan apa yang harus diambil untuk membantu mendiagnosis mengapa ini mungkin terjadi?
sumber
scheme
(https) denganproxy_redirect default
perilaku yang mengharapkan http. Biarkan konfigurasi seperti sebelum mengomentari header Host dan ubahproxy_redirect
konten menjadi$scheme://$host:$server_port/ /gitlab/;
. Pastikan Anda tidak menekan header cache dalam browser (gunakan cli tools atau navigasi pribadi) saat pengujian.Apa yang dikatakan @XavierLucas benar, yang didukung harus menangani tautan. Dokumentasi gitlab memiliki panduan di bawah judul Install GitLab di bawah URL relatif . Saya mengalami masalah ini baru-baru ini ketika menyiapkan server arch linux dengan gitlab dan nginx diinstal dan ini menyelesaikan masalah saya dengan mengkompilasi ulang semua aset untuk memiliki jalur relatif yang benar.
sumber