2017-08-29 3 views
0

Je souhaite utiliser NGINX comme proxy pour accéder à Deluge qui se trouve dans mon réseau domestique (NGINX est disponible publiquement).Comment passer des appels proxy à une URL spécifique pour déluge en utilisant NGINX?

Cette configuration fonctionne:

location 8112; 

location/{ 
    proxy_pass http://deluge_address:8112; 
} 

Cependant, je voudrais utiliser une adresse sous forme de http://nginx_address/deluge à http://deluge_address:8112 à interne soumise à proxy.

J'ai essayé les éléments suivants:

location /deluge/ { 
    proxy_pass http://deluge_address:8112/; 
} 

(j'ai essayé différentes combinaisons de fuite / - aucun travail). Mais j'ai obtenu 404 Not found à la place.

J'ai quelques connaissances sur les réseaux, mais pas trop. Est-ce que quelqu'un a une idée de ce que je fais à tort?

+0

Est-ce que Deluge est un site Web basé sur HTML? Si oui, cela peut ou peut ne pas fonctionner. Supposons que la page d'accueil de déluge ait un lien "/ abc", déluge s'attend à ce qu'il soit disponible à 'http: // nginx_address/abc", mais vous vous attendez à ce que la page demande "http: // nginx_address/deluge/abc". le navigateur fait cette demande, il ne fonctionnera pas –

+0

Déluge n'atteint pas à l'extérieur - c'est juste une interface web pour le service hébergé à 'deluge_address' (vous pouvez le voir ici https://www.howtogeek.com/142044/ comment-tourner-un-framboise-pi-dans-un-toujours-sur-bittorrent-box /) – Werolik

Répondre

1

Je n'ai trouvé une solution pour cela, mais trouvé un bug aussi dans Nginx dans le même temps

https://trac.nginx.org/nginx/ticket/1370#ticket

Modifier-1

On dirait bug i ouvert une session était un invalide, qui m'a même aidé à comprendre un peu plus de choses. J'ai donc édité la config un peu.

Vous devez utiliser ci-dessous config

location ~* /deluge/(.*) { 
    sub_filter_once off; 
    sub_filter_types text/css; 
    sub_filter '"base": "/"' '"base": "/deluge/"'; 
    sub_filter '<head>' '<head>\n<base href="/deluge/">'; 
    sub_filter 'src="/' 'src="./'; 
    sub_filter 'href="/' 'href="./'; 
    sub_filter 'url("/' 'url("./'; 
    sub_filter 'url(\'/' 'url(\'./'; 

    set $deluge_host 192.168.33.100; 
    set $deluge_port 32770; 
    proxy_pass http://$deluge_host:$deluge_port/$1; 
    proxy_cookie_domain $deluge_host $host; 
    proxy_cookie_path//deluge/; 
    proxy_redirect http://$deluge_host:$deluge_port/ /deluge/; 
} 

La clé est d'insérer une URL de base dans les pages à l'aide ci-dessous

sub_filter '<head>' '<head>\n<base href="/deluge/">'; 

Et puis faire le remplacement dans src et href attributs en html. Et aussi url(' dans les entrées css.

Heureusement, déluge a une config JavaScript qui a l'URL de base. Donc, nous pouvons remplacer la même chose en ajoutant

sub_filter '"base": "/"' '"base": "/deluge/"'; 
+0

Je l'ai essayé tel quel (en changeant l'hôte déluge et les variables de port à la mine) - malheureusement, ne fonctionne pas. J'obtiens toujours 404. Je vais essayer de me déplacer dans cette direction Pourriez-vous me dire, comment je peux savoir, quels appels NGINX essaie de faire et quelle est la réponse? – Werolik

+0

J'ai testé cela en utilisant docker et cela a bien fonctionné pour C'est ce que j'ai lancé 'docker run -P -d -it linuxserver/deluge' Vous pouvez essayer ma solution en utilisant ce –

+0

Il a fonctionné tel quel dans le e sd Pas sûr, ce qui n'allait pas. J'ai essayé de tout commenter et de commenter ligne par ligne - à la fin, ça a juste marché. Je viens d'ajouter deux lignes pour activer la journalisation (journal d'accès/erreur). Merci! – Werolik