无法在子域上将 YouTrack 与 nginx 一起使用

Cannot use YouTrack with nginx on a subdomain

我正在尝试 运行 通过 nginx 将 YouTrack 作为子域。但是 YouTrack 不起作用。

我正在使用 YouTrack 2018.1.41826,因为对 YouTrack 2019 的更新不起作用(更新后无法登录,但这是一个单独的问题),nginx 1.18.0,Java 8u265-b01对于 YouTrack 和 (AdoptOpenJDK-)Java 11.0.8+10 对于 nginx 和 tomcat(见下文)。我通过

在端口 8081 上启动 YouTrack

java -Xmx2048m -jar youtrack-2018.1.41826.jar localhost:8081 &

在 YouTrack 中,基础 URL 配置为 https://<my domain>/youtrack<my domain> 是我的域名。在端口 8080 上,一个 tomcat 服务器是 运行 个不同的应用程序。所以我配置nginx如下(替换<my domain>):

    http {
        include       mime.types;
        default_type  application/octet-stream;

        client_max_body_size 12m;
        client_body_buffer_size 16k;

        sendfile        on;

        keepalive_timeout  65;

        location / {

            proxy_set_header        Host $host;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        X-Forwarded-Proto $scheme;

            proxy_pass          http://localhost:8080;
            proxy_read_timeout  90;

            proxy_redirect      http://localhost:8080 https://<my domain>;
        }

        location ~ ^/youtrack/(.*)$ {

            proxy_set_header X-Forwarded-Host $http_host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;

            proxy_buffers 8 64k;
            proxy_busy_buffers_size 128k;
            proxy_buffer_size 64k;

            client_max_body_size 10m;

            proxy_http_version 1.1;
            proxy_pass http://127.0.0.1:8081/;

            proxy_redirect      http://127.0.0.1:8081 https://<my domain>/youtrack;
        }

        location ~ ^/youtrack/api/eventSourceBus/(.*)$ {
            proxy_cache off;
            proxy_buffering off;
            proxy_read_timeout 86400s;
            proxy_send_timeout 86400s;
            proxy_set_header Connection '';
            chunked_transfer_encoding off;

            proxy_set_header X-Forwarded-Host $http_host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_http_version 1.1;
            proxy_pass http://127.0.0.1:8081/api/eventSourceBus/;

            proxy_redirect      http://127.0.0.1:8081 https://<my domain>/youtrack;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

现在,当在网络浏览器中打开 https:///youtrack/ 时,URL 更改为 https://<my domain>/oauth?state=%2F,忘记了 youtrack 子域。我应该如何解决这个问题?

YouTrack 的基本限制是它应该使用与代理它相同的 URL 路径进行部署。

例如,要使其在 https://<my domain>/youtrack 上运行,应将应用程序部署到 http://127.0.0.1:8081/youtack,而不仅仅是 http://127.0.0.1:8081。所以应用启动命令要调整如下:

java -Xmx2048m -jar youtrack-2018.1.41826.jar 8081/youtrack

此外,不要忘记相应地更新 Nginx 配置文件中的 proxy_pass 指令。

问题已在youtrack.jetbrains.com/issue/JT-58725上回答(其实更简单):

location /youtrack {
            proxy_set_header X-Forwarded-Host $http_host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;

            proxy_buffers 8 64k;
            proxy_busy_buffers_size 128k;
            proxy_buffer_size 64k;

            client_max_body_size 10m;

            proxy_http_version 1.1;
            proxy_pass http://127.0.0.1:8081/youtrack;
            proxy_redirect      http://127.0.0.1:8081 https://<my domain>;
}

location /youtrack/api/eventSourceBus {
            proxy_cache off;
            proxy_buffering off;
            proxy_read_timeout 86400s;
            proxy_send_timeout 86400s;
            proxy_set_header Connection '';
            chunked_transfer_encoding off;

            proxy_set_header X-Forwarded-Host $http_host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_http_version 1.1;
            proxy_pass http://127.0.0.1:8081/youtrack/api/eventSourceBus;
            proxy_redirect      http://127.0.0.1:8081 https://<my domain>;
        }