Вопрос или проблема
Я начинаю с nginx…
У меня есть сервер odoo с сертификатом Let’s Encrypt, который работает прекрасно.
На odoo.domain.com, 192.168.1.159, перенаправление NAT, с этой конфигурацией nginx:
#сервер odoo
upstream odoo {
server 127.0.0.1:8069;
}
upstream odoochat {
server 127.0.0.1:8072;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# http -> https
server {
listen 80;
server_name odoo.domain.fr;
rewrite ^(.*) https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name odoo.domain.fr;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
# SSL параметры
ssl_certificate /etc/letsencrypt/live/odoo.domain.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/odoo.domain.fr/privkey.pem;
ssl_session_timeout 30m;
ssl_protocols TLSv1.2;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# лог
access_log /var/log/nginx/odoo.access.log;
error_log /var/log/nginx/odoo.error.log;
# Перенаправить запросы вебсокетов на порт odoo gevent
location /websocket {
proxy_pass http://odoochat;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
}
# Перенаправить запросы на сервер загрузки odoo
location / {
# Добавить заголовки для прокси-режима odoo
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
proxy_pass http://odoo;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
}
# общий gzip
gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
gzip on;
}
Я начал устанавливать сервер Passbolt, и ему нужно принудительное использование 443 https с сертификатом Let’s Encrypt.
На passbolt.domain.com, 192.168.1.160,
Если я изменю перенаправление NAT на IP сервера Passbolt в маршрутизаторе, это работает прекрасно…
С этой конфигурацией nginx:
#
# Passbolt.conf - файл конфигурации Nginx для запуска программного обеспечения Passbolt.
#
server {
# Управляется Passbolt
server_name passbolt.domain.fr;
client_body_buffer_size 100K;
client_header_buffer_size 1K;
client_max_body_size 5M;
client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 5 5;
send_timeout 10;
root /usr/share/php/passbolt/webroot;
index index.php;
error_log /var/log/nginx/passbolt-error.log info;
access_log /var/log/nginx/passbolt-access.log;
# Управляется Passbolt
# include __PASSBOLT_SSL__
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_intercept_errors on;
fastcgi_split_path_info ^(.+\.php)(.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SERVER_NAME $http_host;
fastcgi_param PHP_VALUE "upload_max_filesize=5M \n post_max_size=5M";
}
listen [::]:443 ssl ipv6only=on; # управляется Certbot
listen 443 ssl; # управляется Certbot
ssl_certificate /etc/letsencrypt/live/passbolt.domain.fr/fullchain.pem; # управляется Certbot
ssl_certificate_key /etc/letsencrypt/live/passbolt.domain.fr/privkey.pem; # управляется Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # управляется Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # управляется Certbot
}
server {
if ($host = passbolt.domain.fr) {
return 301 https://$host$request_uri;
} # управляется Certbot
listen 80;
listen [::]:80;
server_name passbolt.domain.fr;
return 404; # управляется Certbot
}
Я не знаю, как сообщить серверу nginx odoo “перенаправить” запрос на другой.
Может кто-то помочь мне?
Спасибо заранее
Йохан
Ответ или решение
Чтобы наладить работу Odoo и Passbolt на одном сервере с использованием NGINX, необходимо настроить обратный прокси для перенаправления запросов к каждому из этих приложений. Вы уже имеете рабочие конфигурации для Odoo и Passbolt, но вам нужно настроить NGINX таким образом, чтобы он мог управлять запросами к обоим приложениям без необходимости менять NAT-редирекцию на маршрутизаторе.
Шаг 1: Настройка виртуального хоста NGINX для Odoo и Passbolt
Вам нужно объединить конфигурации так, чтобы один сервер NGINX обрабатывал оба домена (odoo.domain.fr
и passbolt.domain.fr
). Вот пример того, как можно настроить конфигурацию, чтобы направлять запросы к Odoo и Passbolt:
# Объединенная конфигурация для Odoo и Passbolt
# Указание upstream для Odoo
upstream odoo {
server 127.0.0.1:8069;
}
upstream odoochat {
server 127.0.0.1:8072;
}
# Настройка перенаправления HTTP на HTTPS для обоих доменов
server {
listen 80;
server_name odoo.domain.fr passbolt.domain.fr;
return 301 https://$host$request_uri;
}
# Конфигурация для Odoo
server {
listen 443 ssl;
server_name odoo.domain.fr;
ssl_certificate /etc/letsencrypt/live/odoo.domain.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/odoo.domain.fr/privkey.pem;
access_log /var/log/nginx/odoo.access.log;
error_log /var/log/nginx/odoo.error.log;
# Настройки прокси для Odoo
location /websocket {
proxy_pass http://odoochat;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
proxy_pass http://odoo;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
}
# Конфигурация для Passbolt
server {
listen 443 ssl;
server_name passbolt.domain.fr;
ssl_certificate /etc/letsencrypt/live/passbolt.domain.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/passbolt.domain.fr/privkey.pem;
root /usr/share/php/passbolt/webroot;
index index.php;
access_log /var/log/nginx/passbolt-access.log;
error_log /var/log/nginx/passbolt-error.log;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SERVER_NAME $http_host;
}
}
Шаг 2: Перепроверка настройки NAT и DNS
Убедитесь, что на вашем маршрутизаторе NAT-редирекция настроена правильно. Необходимо, чтобы оба домена (odoo.domain.fr
и passbolt.domain.fr
) указывали на IP-адрес вашего сервера. Это можно сделать, проверив записи A в вашей DNS-записи.
Шаг 3: Перезапуск NGINX
После изменения конфигурации обязательно проверьте правильность её синтаксиса:
sudo nginx -t
Если все в порядке, выполните перезапуск NGINX:
sudo systemctl restart nginx
Заключение
Теперь ваш сервер NGINX будет обрабатывать запросы для Odoo и Passbolt, перенаправляя их соответственно. Это решение позволяет избежать необходимости менять NAT-редирекцию и обеспечивает работу обеих программных платформ на одном сервере. Убедитесь, что вы регулярно проверяете логи ошибок и доступов, чтобы следить за производительностью и исправлять возможные проблемы.