Montaje de Odoo con SSL y Nginx [v8]

1,306 views
Skip to first unread message

Juan Formoso Vasco

unread,
Jul 4, 2017, 9:58:43 AM7/4/17
to Usuarios Odoo / OpenERP en España
Hola a todos:

He instalado Odoo en un servidor y funciona bien. Ahora, me gustaría configurar un sitio con Nginx para utilizar SSL y principalmente intentar mejorar la velocidad de Odoo. Lo tengo hecho otras veces, pero esta vez no hay manera.

Primero creé el siguiente sitio de Nginx en su carpeta sites-available. (ya he comprobado que está activado con su enlace simbólico en la carpeta sites-enabled):

upstream backend-odoo {
    server
127.0.0.1:30081;
}

upstream backend
-odoo-im {
    server
127.0.0.1:32081;
}

server
{
    listen
80;
    add_header
Strict-Transport-Security max-age=2592000;
    rewrite
^/.*$ https://$host$request_uri? permanent;
}

server
{
    listen
443 default;

   
# ssl settings
    ssl on
;
    ssl_certificate
/etc/nginx/ssl/cert.pem;
    ssl_certificate_key
/etc/nginx/ssl/key.pem;
    keepalive_timeout
60;

   
# proxy header and settings
    proxy_set_header
Host $host;
    proxy_set_header X
-Real-IP $remote_addr;
    proxy_set_header X
-Forward-For $proxy_add_x_forwarded_for;
    proxy_set_header X
-Forwarded-Proto $scheme;
    proxy_redirect off
;

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

   
# increase proxy buffer size
    proxy_buffers
16 64k;
    proxy_buffer_size
128k;

   
# force timeouts if the backend dies
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503
;

   
# enable data compression
    gzip on
;
    gzip_min_length
1100;
    gzip_buffers
4 32k;
    gzip_types text
/plain application/x-javascript text/xml text/css;
    gzip_vary on
;

    location
/ {
        proxy_pass http
://backend-odoo;
   
}

    location
~* /web/static/ {
       
# cache static data
        proxy_cache_valid
200 60m;
        proxy_buffering on
;
        expires
864000;
        proxy_pass http
://backend-odoo;
   
}

    location
/longpolling {
        proxy_pass http
://backend-odoo-im;
   
}
}

He recargado y reiniciado Nginx. También he modificado los siguientes parámetros en el archivo de configuración de Odoo:

longpolling_port = 32081
proxy_mode
= True
secure_cert_file
= /etc/nginx/ssl/cert.pem
secure_pkey_file
= /etc/nginx/ssl/key.pem
workers
= 33
xmlrpc
= True
xmlrpc_interface
= 127.0.0.1
xmlrpc_port
= 30081
xmlrpcs
= True
xmlrpcs_interface
= 127.0.0.1
xmlrpcs_port
= 31081

También he reiniciado el servicio de Odoo. He comprobado los puertos abiertos del servidor a través del comando nmap -sT -O localhost. El resultado es:

PORT     STATE SERVICE
80/tcp   open  http
139/tcp  open  netbios-ssn
443/tcp  open  https
445/tcp  open  microsoft-ds
5432/tcp open  postgresql
8022/tcp open  oa-system

Para acceder al servidor desde un navegador escribo local.example.com en la URL. Pero se queda cargando eternamente y nunca se llega a ver el interfaz de Odoo. He probado también con https://local.example.com por si acaso. Pero nada, sólo veo Failed to load resource: net::ERR_CONNECTION_TIMED_OUT si abro la consola JS del navegador. Resalto el dominio que tengo que escribir para acceder al servidor porque me han comentado en foros que al ser un subdominio el problema puede estar con el certificado SSL. He generado el certificado con el comando:

sudo openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes

De momento es de prueba, ¿puede ser éste el problema? En mi ordenador, con idéntica configuración de Nginx y de Odoo e idéntica instancia, usando otro certificado SSL generado exactamente de la misma manera, sí que consigo que Odoo funcione.

¿Alguien me puede decir qué puede estar pasando? De momento estoy bastante perdido.

Saludos y gracias.

ゴイコエチェアイボン

unread,
Jul 5, 2017, 4:49:59 AM7/5/17
to Usuarios Odoo / OpenERP en España
Hola,

yo diría que es problema de DNS. 
O bien la máquina donde intentas abrir la dirección, local.example.com, no es capaz de encontrarla, o bien el servidor nginx no es capaz de resolver el backend-odoo. 
Prueba a cambiar los nombres de dominio por las direcciones IP en el fichero de configuración de nginx.

Si vas a usar subdominios, hay un tipo de certificado que llaman "wildcard", que sirve para *.dominio.com. Si el certificado no esta emitido por una entidad autorizada, el navegador te dará una advertencia, pero te dejará acceder al sitio bajo tu responsabilidad.
También te recomiendo que si estas trabajando en una red local uses en los nombres de dominio la notación ".net", o mejor aun, ".local", puesto que example.com es un nombre reservado. 

Un saludo.

Juan Formoso Vasco

unread,
Jul 5, 2017, 7:29:32 AM7/5/17
to Usuarios Odoo / OpenERP en España
Hola, muchas gracias por responder!

Con el fichero de configuración de Nginx supongo que te refieres al sitio que creé en sites-available, ¿no? En ese caso, me comentabas que cambiese los nombres de dominio y en su lugar pusiese las IP, pero no tengo puesto ningún nombre de dominio escrito en el sitio, ¿verdad?.

Respecto a lo del certificado wildcard, he eliminado el anterior y creado uno nuevo. El comando que utilicé es el mismo, la única diferencia es que cuando empieza a pedir los datos, código de país, provincia, etc... (hasta ahora le respondía cualquier cosa), cuando solicita el Common Name, le he respondido *.example.com/CN=example.com. No sé si con eso basta, el caso es que he reiniciado Nginx y Odoo y sigue ocurriendo lo mismo.

Realmente el subdominio no es local.example.com, donde estoy poniendo example en realidad siempre estoy poniendo un nombre diferente, y el subdominio fue hecho por otra persona para que yo metiese Odoo ahí.

¿Qué puedo estar haciendo mal?

Saludos y gracias.

ゴイコエチェアイボン

unread,
Jul 5, 2017, 8:43:40 AM7/5/17
to Usuarios Odoo / OpenERP en España
Hola,

Me he equivocado. Los nombres son de los uptreams, que si apuntan a la dirección local.
De todas formas, añadiría en la configuración del sitio el parámetro, server_name, con el nombre que tiene que asociar nginx con esta configuración.

EJ:
    server_name odoo.mired.local #El nombre que se quiera usar para publicar el servicio.

En todo caso en la maquina cliente intentaría acceder por la IP publica del servidor a ver que dice, pero seguramente sirve la página inicial de nginx.

Un saludo.

Nacho Fortea

unread,
Jul 6, 2017, 5:06:38 AM7/6/17
to Usuarios Odoo / OpenERP en España
Buenas Juan,

Hay un módulo de OCA letsencrypt que te permite configurar odoo con uno de estos certificados gratuitos. Lo tienes disponible en https://github.com/OCA/server-tools/tree/10.0/letsencrypt.
Consejos antes de instalarlo:
  • Tener correctamente configurado nginx para hacer de proxy.
  • Quitar el puerto de la propiedad web.base.url

Con esto evtiarás problemas con al renovación de certificados (yo los estoy teniendo al no haberlo hecho así).


Te pongo un ejemplo de como debería ir el fichero de configuración del sitio (yo desactivaría la redirección https a que el certificado estuvieses correctamente instalado).


upstream openerp {
        server 127.0.0.1:8069;
}
server {
        listen 443 ssl;
        listen 80;
        if ($scheme = "http") {
            set $redirect_https 1;
        }
        if ($request_uri ~ ^/.well-known/acme-challenge/) {
            set $redirect_https 0;
        }
        if ($redirect_https) {
            rewrite ^   https://$server_name$request_uri? permanent;
        }
        server_name myodoo.tld www.myodoo.tld;

        ssl_certificate /var/lib/odoo/.local/share/Odoo/letsencrypt/myodoo.tld.crt;
        ssl_certificate_key /var/lib/odoo/.local/share/Odoo/letsencrypt/myodoo.tld.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

...


Un saludo
Reply all
Reply to author
Forward
0 new messages