Настройка Nginx как reverse proxy
Если Aulynk работает за Nginx, необходимо правильно настроить проксирование HTTP, WebSocket и (опционально) федеративный порт.
Базовая конфигурация
Nginx принимает HTTPS-соединения и проксирует их на Go-бэкенд Aulynk, работающий на порту 8080.
server {
listen 80;
server_name aulynk.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name aulynk.example.com;
ssl_certificate /etc/letsencrypt/live/aulynk.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/aulynk.example.com/privkey.pem;
client_max_body_size 100m;
location / {
proxy_pass http://127.0.0.1:8080;
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;
}
}
WebSocket
WebSocket-соединение устанавливается по адресу /api/ws. Для корректной работы необходимо проксировать заголовки Upgrade и Connection.
location /api/ws {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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_read_timeout 86400s;
proxy_send_timeout 86400s;
}
Параметры proxy_read_timeout и proxy_send_timeout увеличены, чтобы Nginx не закрывал долгоживущие WebSocket-соединения.
Федерация (порт 8448)
Если включена Matrix-федерация, удалённые серверы обращаются по порту 8448. Можно проксировать этот порт через отдельный блок server.
server {
listen 8448 ssl http2;
server_name aulynk.example.com;
ssl_certificate /etc/letsencrypt/live/aulynk.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/aulynk.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
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;
}
}
Альтернативно, в config.yaml можно указать federation.port: 443, тогда отдельный блок не нужен -- федеративные запросы пойдут по основному HTTPS-порту.
Let's Encrypt с certbot
Установка сертификата:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d aulynk.example.com
Certbot автоматически обновит конфигурацию Nginx и настроит автопродление. Для ручного обновления:
sudo certbot renew
sudo systemctl reload nginx
Полный пример конфигурации
upstream aulynk_backend {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name aulynk.example.com;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
server_name aulynk.example.com;
ssl_certificate /etc/letsencrypt/live/aulynk.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/aulynk.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
client_max_body_size 100m;
location /api/ws {
proxy_pass http://aulynk_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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_read_timeout 86400s;
proxy_send_timeout 86400s;
}
location / {
proxy_pass http://aulynk_backend;
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;
}
}
# Federation (Matrix S2S)
server {
listen 8448 ssl http2;
server_name aulynk.example.com;
ssl_certificate /etc/letsencrypt/live/aulynk.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/aulynk.example.com/privkey.pem;
location / {
proxy_pass http://aulynk_backend;
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;
}
}
При использовании Nginx отключите встроенный HTTPS в Aulynk:
server:
httpAddr: ":8080"
https:
enabled: false