Drone設置Nginx反向代理後css/js 404錯誤

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只支持根據子域名轉發。

參考文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章