jpillora / cloud-torrent

☁️ Cloud Torrent: a self-hosted remote torrent client
GNU Affero General Public License v3.0
5.73k stars 1.82k forks source link

Using nginx for reverse proxy when path name not equals to '/' #291

Closed KurumiSerori closed 4 years ago

KurumiSerori commented 5 years ago

Hi, I have deployed cloud-torrent at port 10000 on a server using nginx listening to port 443. The service works well when we directly access http://domain:10000, but for some security reason, we are restricting access to :443 at present so a direct access to port 10000 from web will be forbidden. To utilize the service, we are planning to use https://domain/10000 as a reverse proxy url, which should redirect us (or proxy pass?) to http://localhost:10000.

However, we find that with this path name '/10000' and rewrite the path in nginx.conf, the page seems right (I think this means .css/.js/other resources are loaded well) but network will launch some failing requests to https://domain/template/config.html, https://domain/template/omni.html, https://domain/template/torrents.html, https://domain/template/downloads.html, and http://domain/sync, where serves an event-stream, and then the page stuck(these urls returning 404) on 'Connecting' if initial path name is not set to '/'. We also tried to modify location '/sync' or something else, but it still doesn't work. It seems Server Sent Event(SSE) is not working or the .html resources are not located properly. An #235 fix has been adapted on the source code.

If path name is set as '/', the correct effect can be done following #141 , but it will only work at the root, which conflicts with other services. I'm not sure how should I modify nginx.conf to achieve such an effect when we apply to other path names.

Here is my nginx.conf

server{
    listen 443 ssl;
    ssl on;
    ...
    server_name    domain
    location / {
        # hosting other services
    }
    location /10000 {    # If we put /10000 to /, the service works well on port 443.
        rewrite ^/10000(.*) /$1 break;
        proxy_set_header Cache-Control: no-cache;
        proxy_set_header Connection '';
        proxy_http_version 1.1;
        chunked_transfer_encoding off;
        proxy_cache off;
        proxy_buffering off;
        proxy_set_header Connection keep-alive;                         
        proxy_connect_timeout 3600;
        proxy_send_timeout 3600;
        proxy_read_timeout 3600;
        keepalive_timeout 3600;
        proxy_pass http://127.0.0.1:10000;
    }
}

Any help is appreciated.

ghost commented 5 years ago

My English is a little weak. At first I try to use TLS by nginx's reverse proxy. I failed and It showed 'conneting' all along. If you try to use TLS for this porject in port which you want. Add following options:

 --key-path, -k     TLS Key file path
  --cert-path, -r    TLS Certicate file path

Then it will be ok if your domain matches the certificate.

KurumiSerori commented 5 years ago

My English is a little weak. At first I try to use TLS by nginx's reverse proxy. I failed and It showed 'conneting' all along. If you try to use TLS for this porject in port which you want. Add following options:

 --key-path, -k     TLS Key file path
  --cert-path, -r    TLS Certicate file path

Then it will be ok if your domain matches the certificate.

Thanks! I'll give it a try ASAP.

bulubula commented 4 years ago

`

    location /ct/ {      
proxy_pass http://127.0.0.1:50511/;
}
location /sync {    
    proxy_set_header Cache-Control: no-cache;
    chunked_transfer_encoding off;
    proxy_cache off;
    proxy_buffering off;
    proxy_set_header Connection keep-alive;

proxy_pass http://127.0.0.1:50511/sync;
}

` it works

KurumiSerori commented 4 years ago

`

    location /ct/ {      
proxy_pass http://127.0.0.1:50511/;
}
location /sync {  
    proxy_set_header Cache-Control: no-cache;
    chunked_transfer_encoding off;
    proxy_cache off;
    proxy_buffering off;
    proxy_set_header Connection keep-alive;

proxy_pass http://127.0.0.1:50511/sync;
}

` it works

Thanks, this config worked. The slash after '/ct' and the first 'proxy_pass ... 50511' cannot be dropped.