2024-11-09 20:54:49 +03:00
|
|
|
|
# Настройка nginx как прямого прокси
|
|
|
|
|
|
|
|
|
|
Собственно, прямой прокси — это прокси, который просто перенаправляет запросы на другой сервер. Очень полезно,
|
|
|
|
|
когда у вас внутри сети есть один компьютер, который виден из интернет (DMZ или через проброс портов), и мы хотим
|
|
|
|
|
перенаправить внешние запросы на другие сервера внутри сети. Заодно можно настроить SSL-терминацию.
|
|
|
|
|
|
|
|
|
|
На примере AudioBookShelf, который должен быть доступен снаружи по адресу `some.you.site` у нас будет вот такой конфиг:
|
2025-02-20 14:00:23 +03:00
|
|
|
|
```nginx configuration
|
2024-11-09 20:54:49 +03:00
|
|
|
|
# config for AudioBookShelf [some.you.site]
|
|
|
|
|
|
|
|
|
|
server {
|
|
|
|
|
server_name [some.you.site]; # доменное имя сайта
|
|
|
|
|
charset utf-8; # кодировка по умолчанию
|
|
|
|
|
|
|
|
|
|
access_log /home/orangepi/web-data/audiobookshelf/logs/audiobookshelf-access.log; # логи с доступом
|
|
|
|
|
error_log /home/orangepi/web-data/audiobookshelf/logs/audiobookshelf-error.log; # логи с ошибками
|
|
|
|
|
|
|
|
|
|
client_max_body_size 512M; # максимальный объем файла для загрузки на сайт (max upload size)
|
|
|
|
|
# listen 80; # managed by Certbot
|
|
|
|
|
listen 443 ssl http2; # managed by Certbot
|
|
|
|
|
ssl_certificate /etc/letsencrypt/live/[some.you.site]/fullchain.pem; # managed by Certbot
|
|
|
|
|
ssl_certificate_key /etc/letsencrypt/live/[some.you.site]/privkey.pem; # managed by Certbot
|
|
|
|
|
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
|
|
|
|
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
|
|
|
|
|
|
|
|
|
location /favicon.ico { root /home/orangepi/web-data/audiobookshelf/html; } # Расположение favicon.ico
|
|
|
|
|
location /favicon.png { root /home/orangepi/web-data/audiobookshelf/html; } # Расположение favicon.png
|
|
|
|
|
location /robots.txt { root /home/orangepi/web-data/audiobookshelf/html; } # robots.txt (dissalow all)
|
|
|
|
|
|
|
|
|
|
location / {
|
|
|
|
|
proxy_pass http://[какой-то-ip]:8000;
|
|
|
|
|
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_http_version 1.1;
|
|
|
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
|
|
|
proxy_set_header Connection "upgrade";
|
|
|
|
|
proxy_set_header X-Forwarded-Proto https;
|
|
|
|
|
proxy_set_header X-Nginx-Proxy true;
|
|
|
|
|
# proxy_redirect off;
|
|
|
|
|
proxy_set_header X-Scheme $scheme;
|
|
|
|
|
add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;
|
|
|
|
|
}
|
|
|
|
|
# location / {
|
|
|
|
|
# index index.html;
|
|
|
|
|
# }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
server {
|
|
|
|
|
if ($host = [some.you.site]) { return 301 https://$host$request_uri; } # managed by Certbot
|
|
|
|
|
server_name [some.you.site];
|
|
|
|
|
listen 80;
|
|
|
|
|
return 404; # managed by Certbot
|
|
|
|
|
}
|
|
|
|
|
```
|
2025-02-20 14:00:23 +03:00
|
|
|
|
|
|
|
|
|
## Проксирование на host если nginx находится внутри Docker
|
|
|
|
|
|
|
|
|
|
Если [nginx находится внутри Docker или Docker Compose](../docker/docker-nginx-w-certbot.md), то он сможет увидеть
|
|
|
|
|
только свои контейнерные IP-адреса и хосты. Если таким nginx нужно проксировать на сам хост, то в конфиге nginx
|
|
|
|
|
нужно указать:
|
|
|
|
|
```nginx configuration
|
|
|
|
|
proxy_pass http://host.docker.internal:xxxx;
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
* `host.docker.internal` -- это специальный DNS-имя, которое указывает на хост, на котором запущен Docker.
|
|
|
|
|
|
|
|
|
|
Начиная с Docker 20.10.0+ сам контейнер надо запускать с дополнительным параметром `--add-host=host.docker.internal:host-gateway`.
|
|
|
|
|
```shell
|
|
|
|
|
docker run --add-host=host.docker.internal:host-gateway ...
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Или добавить дополнительную инструкцию `extra_hosts: "host.docker.internal:host-gateway"` в `docker-compose.yml` при
|
|
|
|
|
использовании Docker Compose:
|
|
|
|
|
```yaml
|
|
|
|
|
services:
|
|
|
|
|
nginx:
|
|
|
|
|
image: nginx:latest
|
|
|
|
|
extra_hosts:
|
|
|
|
|
- "host.docker.internal:host-gateway"
|
|
|
|
|
ports:
|
|
|
|
|
- "80:80"
|
|
|
|
|
...
|
|
|
|
|
...
|
|
|
|
|
```
|