Drone設置Nginx反向代理後css/js 404錯誤
前言
在服務器上安裝了Drone,端口爲9080。
計劃將http://xdevops.cn/drone/反向代理(轉發)到服務器上的9080端口,因爲我不想直接暴露9080端口。
Nginx配置
upstream drone_server {
server 127.0.0.1:9080;
}
...
location /drone/ {
proxy_pass http://drone_server/;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_http_version 1.1;
proxy_buffering off;
chunked_transfer_encoding off;
}
...
靜態資源文件404錯誤
瀏覽器訪問http://xdevops.cn/drone/,按F12調試時,發現瀏覽器訪問css的路徑爲http://xdevops.cn/css/app.65cc3634.css,而不是想象中的http://xdevops.cn/drone/css/app.65cc3634.css
掉坑過程
嘗試1:將/
去掉,仍然有問題。
location /drone {
proxy_pass http://drone_server;
...
}
嘗試2:將/
加回去,仍然有問題。
嘗試3:不用upstream,仍然有問題。
location /drone/ {
proxy_pass http://127.0.0.1:9080/;
...
}
嘗試4:爲靜態文件執行proxy_pass,但是這樣會影響原來站點的訪問,放棄嘗試。
嘗試5: 在proxy_pass的後面也加上drone,但是Drone是否可以支持自定義訪問上下文?
location /drone {
proxy_pass http://drone_server/drone;
...
}
出坑過程
在嘗試5時,去查看官方文檔是否可以自定義Drone的訪問上下文,發現沒有這個配置。
然後就發現了Drone的GitHub issues中說明了Drone不支持根據url(比如http://xdevops.cn/drone/)轉發,只支持轉發到子域名(比如http://drone.xdevops.cn)。
參見:
如果我更早地用Bing或Google來說搜索
drone nginx issue site:github.com
我就能早點出坑了。
爲Drone配置Nginx的官方文檔:
Nginx配置文件示例:
upstream drone_server {
server 127.0.0.1:9080;
}
server {
listen 80;
listen [::]:80;
server_name drone.xdevops.cn;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass http://drone_server;
proxy_redirect off;
proxy_http_version 1.1;
proxy_buffering off;
chunked_transfer_encoding off;
}
}
小結
Jenkins是支持根據Nginx根據url轉發的(參見:爲Jenkins設置Nginx反向代理),但是Drone只支持根據子域名轉發。