Я пытаюсь заставить Nginx работать как обратный прокси для веб-клиента Transmission. Оба находятся в отдельных контейнерах Docker с Docker Compose.
Я читал предыдущие похожие вопросы, но они не помогли мне: https://unix.stackexchange.com/questions/64812/get-transmission-web-interface-working-with-web-server
https://stackoverflow.com/questions/15391073/nginx-transmission-daemon-url-rewrite
Nginx выдает ошибку:
[ошибка] 6 # 6: * 3 "/etc/nginx/html/transmission/web/index.html" не найден (2: нет такого файла или каталога), клиент: 172.18.0.1, сервер: torrent.localhost, запрос: «GET / передача / web / HTTP / 1.1», хост: «torrent.localhost»
Это заставляет меня подозревать, что proxy_pass работает некорректно, поскольку он все еще пытается захватить html-файл из файловой системы.
Любая помощь будет очень высоко ценится!
hello world!
404: Not Found
docker-compose.yml:
version: "2"
services:
nginx:
image: nginx
container_name: nginx-proxy
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./www:/data/www
ports:
- "80:80"
- "443:443"
transmission:
image: linuxserver/transmission
container_name: transmission
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
- USER=username
- PASS=password
volumes:
- ./transmission/config:/config
- ./transmission/downloads:/downloads
- ./transmission/watch:/watch
ports:
- "9091:9091"
- "51413:51413"
- "51413:51413/udp"
restart: unless-stopped
nginx.conf:
events {
}
http {
server {
listen 80;
server_name localhost 127.0.0.1;
root /data/www;
location = / {
index index.html;
}
}
server {
server_name torrent.localhost;
location = / {
proxy_read_timeout 300;
proxy_pass_header X-Transmission-Session-Id;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://transmission:9091;
}
}
}
index.html:
hello world!
Вы можете добиться этого, добавив свои контейнеры в единую сеть. вы можете определить сеть в файле docker-compose. Пример приведен ниже,
version: "2"
services:
nginx:
image: nginx
container_name: nginx-proxy
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./www:/data/www
ports:
- "80:80"
- "443:443"
networks:
NETWORKNAME:
ipv4_address: 10.5.2.1
transmission:
image: linuxserver/transmission
container_name: transmission
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
- USER=username
- PASS=password
volumes:
- ./transmission/config:/config
- ./transmission/downloads:/downloads
- ./transmission/watch:/watch
ports:
- "9091:9091"
- "51413:51413"
- "51413:51413/udp"
restart: unless-stopped
networks:
NETWORKNAME:
ipv4_address: 10.5.2.2
networks:
NETWORKNAME:
driver: bridge
ipam:
config:
- subnet: 10.5.0.0/16
gateway: 10.5.0.1
Замените NETWORKNAME, как хотите. Также выберите маску подсети в соответствии с вашими требованиями (IP-адреса также вы можете выбрать по своему усмотрению). Затем измените свою конфигурацию nginx, как показано ниже,
server {
listen 80;
server_name "abc.example.com"; #your domain name
location / {
limit_except GET POST PUT HEAD DELETE OPTIONS PATCH {
deny all;
}
proxy_pass https://10.5.2.2; #IP of your web container
proxy_set_header Host $host:$server_port;
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_intercept_errors on;
}
}
В приведенном ниже проекте в качестве обратного прокси используется контейнер Nginx. Вы можете обратиться к этому проекту и найти более полезную информацию. Dockerized среда разработки OrangeHRM
Ваша проблема заключается в знаке равенства после слова "местоположение". Знак равенства может использоваться, если местоположение должно соответствовать ТОЧНОМУ URI запроса.
Вы можете удалить знак равенства ("=") следующим образом:
server {
server_name torrent.localhost;
location / { # <-- remove "=" sign
proxy_read_timeout 300;
proxy_pass_header X-Transmission-Session-Id;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://transmission:9091;
}
}