Przejdź do zawartości

Jak ustawić nginx jako reverse proxy dla Odoo?

8 czerwca 2026 przez

Nginx jako reverse proxy to niezbędne rozwiązanie dla każdej produkcyjnej instalacji Odoo. Pozwala na zwiększenie bezpieczeństwa, wydajności oraz umożliwia obsługę certyfikatów SSL/TLS. W tym przewodniku pokażemy, jak prawidłowo skonfigurować nginx jako reverse proxy dla Odoo.

Dlaczego warto używać nginx jako reverse proxy dla Odoo?

Odoo standardowo działa na porcie 8069, co nie jest optymalne dla środowiska produkcyjnego. Nginx jako reverse proxy oferuje szereg korzyści:

  • Bezpieczeństwo - ukrywa rzeczywisty adres i port serwera Odoo
  • SSL/TLS - centralne zarządzanie certyfikatami i szyfrowaniem
  • Wydajność - buforowanie treści statycznych, kompresja gzip i wsparcie HTTP/2
  • Load balancing - możliwość rozłożenia ruchu na wiele instancji
  • Standardowe porty - dostęp przez porty 80 i 443

Instalacja nginx

Przed konfiguracją nginx jako reverse proxy dla Odoo, należy go zainstalować w systemie. Dla systemów Ubuntu/Debian wykonaj:

sudo apt update
sudo apt install nginx -y

Dla systemów CentOS/RHEL:

sudo yum install epel-release -y
sudo yum install nginx -y

Po instalacji uruchom i włącz nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

Konfiguracja podstawowa nginx dla Odoo

Utwórz nowy plik konfiguracyjny dla Odoo w katalogu nginx:

sudo nano /etc/nginx/sites-available/odoo

Podstawowa konfiguracja reverse proxy dla Odoo wygląda następująco:

upstream odoo {
    server 127.0.0.1:8069;
}

upstream odoochat {
    server 127.0.0.1:8072;
}

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

server {
    listen 80;
    server_name twoja-domena.pl;

    proxy_read_timeout 720s;
    proxy_connect_timeout 720s;
    proxy_send_timeout 720s;

    # Przekierowanie na HTTPS
    # return 301 https://$host$request_uri;

    # Log files
    access_log /var/log/nginx/odoo-access.log;
    error_log /var/log/nginx/odoo-error.log;

    # Proxy headers
    proxy_set_header X-Forwarded-Host $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_set_header Host $host;

    # Obsługa długich połączeń (longpolling)
    location /longpolling {
        proxy_pass http://odoochat;
        proxy_redirect off;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }

    # Obsługa websocket dla komunikatora
    location /websocket {
        proxy_pass http://odoochat;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Forwarded-Host $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;
    }

    # Główna lokalizacja
    location / {
        proxy_pass http://odoo;
        proxy_redirect off;
    }

    # Cache dla plików statycznych
    location ~* /web/static/ {
        proxy_buffering on;
        expires 7d;
        add_header Cache-Control 'public, max-age=604800, immutable';
        proxy_pass http://odoo;
    }

    # Kompresja gzip
    gzip on;
    gzip_vary on;
    gzip_min_length 1000;
    gzip_comp_level 5;
    gzip_types text/plain text/css text/xml text/javascript application/javascript application/json application/xml+rss application/rss+xml font/truetype font/opentype application/vnd.ms-fontobject image/svg+xml;
    gzip_disable 'msie6';
}

Wyjaśnienie kluczowych parametrów

upstream odoo - definiuje backend serwera Odoo działającego na porcie 8069. Jeśli zmieniałeś port Odoo, dostosuj tę wartość.

upstream odoochat - obsługuje websocket i longpolling dla funkcji czasu rzeczywistego (komunikator, powiadomienia) na porcie 8072. Od Odoo 11+ standardowo używany jest tryb gevent.

map $http_upgrade - zapewnia prawidłową obsługę protokołu WebSocket wymaganego przez współczesne wersje Odoo.

proxy_read_timeout - zwiększony timeout dla długotrwałych operacji w Odoo, takich jak generowanie raportów czy import dużych plików.

proxy_set_header - nagłówki przekazujące informacje o kliencie do Odoo. Header X-Forwarded-Proto jest szczególnie ważny dla prawidłowego działania Odoo za proxy.

Konfiguracja pliku odoo.conf dla pracy z nginx

Aby Odoo poprawnie współpracowało z nginx jako reverse proxy, należy dostosować plik konfiguracyjny odoo.conf. Dodaj lub zmodyfikuj następujące parametry:

[options]
proxy_mode = True
xmlrpc_interface = 127.0.0.1
netrpc_interface = 127.0.0.1
workers = 4
longpolling_port = 8072
list_db = False

Parametr proxy_mode = True informuje Odoo, że działa za reverse proxy i powinno ufać nagłówkom X-Forwarded-*.

Parametr workers włącza tryb wieloprocesowy - niezbędny dla środowisk produkcyjnych. Ustaw wartość na 2 x liczba rdzeni CPU + 1.

Parametr list_db = False zwiększa bezpieczeństwo, ukrywając listę baz danych przed nieautoryzowanym dostępem.

Aktywacja konfiguracji nginx

Utwórz dowiązanie symboliczne do katalogu sites-enabled:

sudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/odoo

Sprawdź poprawność konfiguracji:

sudo nginx -t

Jeśli test zakończył się sukcesem, przeładuj nginx:

sudo systemctl reload nginx

Konfiguracja HTTPS/SSL

Dla środowiska produkcyjnego niezbędne jest skonfigurowanie szyfrowanego połączenia. Szczegółowy przewodnik znajdziesz w artykule jak skonfigurować HTTPS/SSL dla Odoo.

Podstawowa konfiguracja HTTPS wygląda następująco:

server {
    listen 443 ssl http2;
    server_name twoja-domena.pl;

    ssl_certificate /etc/ssl/certs/odoo-cert.crt;
    ssl_certificate_key /etc/ssl/private/odoo-key.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    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;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # HSTS
    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains' always;

    # Pozostała konfiguracja proxy jak wyżej
    # ...
}

Optymalizacja wydajności

Zwiększenie buforów

Dodaj do konfiguracji serwera:

proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;

Limit rozmiaru plików

Jeśli planujesz przesyłać duże pliki (np. załączniki, dokumenty):

client_max_body_size 100M;

Pamiętaj, aby również w pliku odoo.conf ustawić odpowiedni parametr limit_memory_hard i limit_memory_soft.

Cache dla treści statycznych

Dla zaawansowanego cache'owania dodaj cache zone w sekcji http w pliku /etc/nginx/nginx.conf:

proxy_cache_path /var/cache/nginx/odoo levels=1:2 keys_zone=odoo_cache:10m max_size=1g inactive=60m use_temp_path=off;

Następnie w lokalizacji dla plików statycznych dodaj:

location ~* /web/static/ {
    proxy_cache odoo_cache;
    proxy_cache_valid 200 60m;
    proxy_buffering on;
    expires 7d;
    add_header Cache-Control 'public, max-age=604800, immutable';
    add_header X-Cache-Status $upstream_cache_status;
    proxy_pass http://odoo;
}

Zabezpieczenia dodatkowe

Ukryj wersję nginx:

server_tokens off;

Dodaj nagłówki bezpieczeństwa:

add_header X-Frame-Options 'SAMEORIGIN' always;
add_header X-Content-Type-Options 'nosniff' always;
add_header X-XSS-Protection '1; mode=block' always;
add_header Referrer-Policy 'no-referrer-when-downgrade' always;

Opcjonalnie możesz dodać Content Security Policy:

add_header Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval' data: https:;" always;

Testowanie konfiguracji

Po skonfigurowaniu nginx jako reverse proxy dla Odoo, przetestuj:

  • Dostęp do Odoo przez standardowy port 80/443
  • Funkcjonowanie longpolling (komunikator, powiadomienia)
  • Upload i download plików
  • Działanie raportów PDF
  • Sprawdź logi nginx pod kątem błędów: sudo tail -f /var/log/nginx/odoo-error.log
  • Zweryfikuj nagłówki HTTP w przeglądarce (narzędzia deweloperskie)

Jeśli Odoo działa jako usługa systemd, zrestartuj ją po zmianach w konfiguracji:

sudo systemctl restart odoo

Rozwiązywanie typowych problemów

502 Bad Gateway

Sprawdź czy Odoo działa:

sudo systemctl status odoo

Zweryfikuj port w konfiguracji upstream. Sprawdź czy Odoo nasłuchuje na porcie 8069:

sudo netstat -tlnp | grep 8069

Sprawdź logi Odoo w poszukiwaniu błędów uruchomienia.

Problemy z longpolling

Upewnij się, że port 8072 jest otwarty i Odoo nasłuchuje na nim. Sprawdź również nagłówki websocket w konfiguracji nginx. W nowszych wersjach Odoo (16+) longpolling może również działać przez /websocket endpoint.

sudo netstat -tlnp | grep 8072

Zweryfikuj, czy w odoo.conf masz ustawiony parametr workers (wymagany dla longpolling).

Wolne ładowanie stron

Zwiększ wartości timeout i buforów. Włącz kompresję gzip dla większej ilości typów MIME. Sprawdź czy worker_class jest ustawiony na gevent w przypadku używania workers. Rozważ zwiększenie liczby workers w konfiguracji Odoo.

Problemy z przesyłaniem dużych plików

Upewnij się, że parametr client_max_body_size jest odpowiednio ustawiony zarówno w nginx, jak i parametry pamięci w odoo.conf. Sprawdź timeout'y - długie uploady mogą wymagać większych wartości proxy_send_timeout.

FAQ - Najczęściej zadawane pytania

Czy mogę używać nginx z Odoo zainstalowanym przez Docker?

Tak, nginx doskonale współpracuje z Odoo działającym w kontenerze Docker. Wystarczy, że w konfiguracji upstream wskazujesz na odpowiedni port wystawiony przez kontener (mapowany z portu 8069 kontenera). Więcej informacji znajdziesz w artykule o instalacji Odoo za pomocą Dockera.

Czy nginx reverse proxy wpływa na wydajność Odoo?

Wręcz przeciwnie - prawidłowo skonfigurowany nginx jako reverse proxy zwiększa wydajność Odoo poprzez cache'owanie treści statycznych, kompresję gzip, wsparcie HTTP/2 i efektywne zarządzanie połączeniami. Nginx obsługuje dziesiątki tysięcy jednoczesnych połączeń zużywając minimalne zasoby systemowe. Jest to szczególnie widoczne przy dużej liczbie użytkowników.

Jak skonfigurować nginx dla wielu instancji Odoo?

Możesz utworzyć osobne bloki server dla każdej instancji Odoo, używając różnych domen lub subdomen. W sekcji upstream zdefiniuj różne porty dla każdej instancji (np. 8069, 8070, 8071) oraz odpowiednie porty longpolling (8072, 8073, 8074). Każda instancja powinna mieć osobny plik konfiguracyjny w sites-available i odpowiednio skonfigurowaną bazę danych PostgreSQL z parametrem dbfilter w odoo.conf dla izolacji baz danych.

Czy muszę używać workers w Odoo za nginx?

Dla środowisk produkcyjnych zdecydowanie tak. Tryb bez workers (threaded) jest odpowiedni tylko do developmentu. Workers umożliwiają równoległe przetwarzanie żądań i są wymagane dla funkcjonalności longpolling. Pamiętaj, że wraz z workers musisz skonfigurować również longpolling_port.

Podsumowanie

Konfiguracja nginx jako reverse proxy dla Odoo to kluczowy krok w przygotowaniu systemu ERP do pracy produkcyjnej. Zwiększa bezpieczeństwo, wydajność i pozwala na profesjonalne zarządzanie ruchem HTTP/HTTPS. Pamiętaj o regularnym monitorowaniu logów nginx, aktualizacji certyfikatów SSL oraz dostosowywaniu konfiguracji zgodnie z rosnącymi potrzebami Twojej organizacji.

Potrzebujesz pomocy w konfiguracji nginx dla Odoo? Zespół KK Innovations specjalizuje się we wdrożeniach i optymalizacji systemów Odoo. Skontaktuj się z nami, aby uzyskać profesjonalne wsparcie w zakresie instalacji, konfiguracji i utrzymania Twojego środowiska Odoo. Zapewnimy bezpieczną i wydajną infrastrukturę dla Twojego biznesu!