martes, 19 de diciembre de 2023

ODOO (III) : (No recomedable) Instalaciones Fallidas docker nginx: 1 fijando las direcciones IP y sin fijar

0. Introducción

Para aumentar la eficiencia de Odoo se va a colocar un servidor web como Nginx para descargar el caché, comprimir y servir ficheros estáticos. Para ello se instalará Nginx y se configurará com "reverse proxy".

NOTA: Esto permite que Nginx pase las peticiones a varios servidores, repartiendo la carga y permitiendo escalar la infraestructura

1. Parar el servicio de apache2 en nuestro ubuntu

Hay que tener en cuenta que el servicio apache2 de nuestra máquina ubuntu suele estar en marcha y ocupa el puerto 80, cosa que puede impedir que funcione nuestro servicio nginx. para pararlo y ver el estado de dicho servicio:

#1. Parar el servicio
sudo systemctl stop apache2

#2. Ver el estado del servicio
sudo systemctl status apache2

Vamos a un navegador y teclemaos http://localhost:80 y no tendria que aparecer nada


2. Conseguir los certificados

En este caso disponemos de un certificado en formato pkcs#12 (extension ".p12"). Parece ser que Nginx prefiere tener el certificado en ficheros, uno con extensión ".crt" y otro, la clave , con extensión ".key". 

Para convertir de format pkcs#12 al último formato ejecutamos:

#1. Extract certificate in crt format
openssl pkcs12 -in ./MyCert.p12 -clcerts -nokeys -out wildcard2023Nginx.crt

#2. Extract key in rsa format
openssl pkcs12 -in ./MyCert.p12 -nocerts -nodes  -out wildcard2023Nginx.rsa

En este caso, el nombre se debe a que es un certificado wildcard que valida cualquier ordenador con el dominio "poblacion.es", como por ejemplo "odoo.poblacion.es" . En el proceso anterior nos pide la contraseña, por tanto ya tenemos este par de certificado y clave:

  • wildcard2023Nginx.crt
  • wildcard2023Nginx.rsa

3. Crear la estructura de carpetas


nginx
   └>nginx-certs    para certificados
   └>nginx-conf     solo para guardar un fichero de configuración (odoo-nginx.conf)

4. Guardar los certificados en la carpeta nginx/certs

Se guardarán el certificado crt y clave rsda en la carpeta nginx/certs

-A PARTIR DE AQUÍ TODO FALLA ----

Opción 1: fijar las direcciones IP

Ver el siguiente post. En dicho post se detalla la configuración de nginx con mas detalle y se evitan gran cantidad de errores. Este post solo sirve para hacernos una idea y hay que cambiar el fichero nginx/odoo-nginx.conf, pues el que se describe en este post falla mas que una escopeta de feria! .

Para aumentar la eficiencia de Odoo se va a colocar un servidor web como Nginx para descargar el caché, comprimir y servir ficheros estáticos. Para ello se instalará Nginx y se configurará com "reverse proxy".

NOTA: Esto permite que Nginx pase las peticiones a varios servidores, repartiendo la carga y permitiendo escalar la infraestructura


Crear el fichero de configuración nginx/odoo-nginx.conf

Que tendrá este contenido. OJO las direciones estáticas IP que se marcan con fondo amarillo de explica su cálculo en el punto 7

#***********************************************************************
# 1. upstream: Definimos los servidores sobre los que se hará el PROXY
#***********************************************************************
upstream odoo16 {
server 172.21.0.3:8069; # Obtenido del fichero prova02_default.json que se ve en NETWORKS->prova02_default ->Inspect
}
# de momento no hacemos el chat
#upstream odoochat {
# server 127.0.0.1:8072;
# }

#***********************************************************************
# 2.1 server: Definimos el comportamiento para el https (p.443)
#***********************************************************************

server {
# 2.1.1 puerto
listen 443 ssl;
# 2.1.2 certificados obtenidos en el punto 2
ssl_certificate /etc/nginx/certs/wildcard2023Nginx.crt;
ssl_certificate_key /etc/nginx/certs/wildcard2023Nginx.rsa;
# 2.1.3 nombre del servidor (Utilizamos VS Code y analizamos la red
server_name 172.21.0.4; # Obtenido del fichero prova02_default.json que se ve en NETWORKS->prova02_default ->Inspect
# También se puede obtener en una shell del nginx y ejecutando hostname -I
# 2.1.4 donde se guardan los logs
access_log /var/log/nginx/odoo.access.log;
error_log /var/log/nginx/odoo.error.log;

# 2.1.5 otros parámetros
proxy_buffers 16 64k;
proxy_buffer_size 128k;

# 2.1.5 Solamente se escogerá este location para verificar que nginx funciona
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}

#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# 2.1.6 Aquí es donde realmente redirigimos al odoo
# El contenido de este location debería ir al "location /" pero como sabemos
# que odoo redirige automáticamente a /web, podemos tener este location
# pero repito, que lo normal es meter este contenido en "location /"
location /web {
proxy_pass http://odoo16; # odoo16 se definió en "upstream"
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;

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 https;
}

# de momento no hacemos el chat
#location /longpolling {
#proxy_pass http://odoochat;
#}

# Este location es el que pone por omisión, y a veces va y otras veces no
# Es mucho mejor cambiarlo a location ~* /static/
# location ~* /web/static/ {

# 2.1.7 Para los recursos: ver
# Cualquier recurso que se encuentre en una carpeta intermedia que
# se llame "static" se recogerá del servidor odoo16.
# Normalmente es para recoger los js y los dibujos
location ~* /static/ {
proxy_cache_valid 200 60m;
proxy_buffering on;
expires 864000;
proxy_pass http://odoo16;
}
}

#***********************************************************************
# 2.2 server: Definimos el comportamiento para el http (p.82)
#***********************************************************************
#Create a new server block to rewrite http to https
server {
listen 80;
listen [::]:80;
server_name 172.21.0.4;
#Add the rewrite directive as below
return 301 https://$host$request_uri;
}

Donde:

  • Se escucha peticiones https del puerto 443 (2.1 apartado server) y se redirigen las peticiones del puerto 80 al 443 (2.2 apartado server)
  • Se le indica la ruta del certificado y clave 
  • Se le indican las rtutas donde guardar los logs dde accesos y de errores
  • Se define en "location" el comportamiento del proxy y donde descargar  los recursos tales como js, imágenes etc

-Crear el fichero docker-compose.yml en la carpeta del post anterior

Que tendrá este contenido y  sustituirá al anterior docker-compose.yml y tendrá contenido único

version: '3.3'
services:
odoo:
container_name: odoo16_02
image: odoo:16.0
env_file: odoo16_pg13.env # environment file
depends_on:
- postgresql
ports:
- "7069:8069" #port mapping(custom-port:8069)
volumes:
- ./odoo-data:/var/lib/odoo
- ./odoo-conf:/etc/odoo
- ./odoo-adds:/odoo/extra-addons #SAME AS odoo.conf addons_path
#--Edu (1)
networks:
default:
#ipv4_adress: 172.21.0.4
#Fi--Edu (1)
postgresql:
container_name: postgres_odoo_02
image: postgres:13
env_file: odoo16_pg13.env # environment file
volumes:
- ./postgresql-data:/var/lib/postgresql/data/pgdata ##SAME AS odoo16_pg13.env PGDAT [4]
networks:
default:
nginx:
container_name: nginx_odoo_02
image: nginx:latest
depends_on:
- odoo
ports:
- "7080:80"
- "7443:443"
#1. Copiar la CARPETA de certificados a la carpeta ./nginx-certs
#2. Copiar el FICHERO de configuración del proxy nginx.conf a la carpeta ./nginx-etc/nginx/conf.d
volumes:
- ./nginx-certs:/etc/nginx/certs
# - ./nginx-log:/var/log
# - ./nginx-conf/odoo-nginx.conf:/etc/nginx/conf.d/odoo-nginx.conf
- ./nginx-conf/odoo-nginx.conf:/etc/nginx/conf.d/default.conf
#--Edu (1)
networks:
default:
networks:
default:
ipam:
config:
- subnet: 172.21.0.0/16

Se definen los puertos a utilizar y los mapeos (volumenes docker) del servidor físico y el enlace al servidor virtual dockerizado.

7. ¿Como se definen la direcciones IP?

En el fichero docker-compose.yml ,al final en el punto networks.defalut.ipam.config.subnet tiene este valor:

172.21.0.0/16

De ahí como hemos indicado que hay unos servicios que dependen de otros (por ejemplo odoo depende de postgresql y nginx depende de odoo) entonces se repartirán las direcciones de los servicios en este orden postgresql, odoo y nginx. Pero el primero que se da és al gateway. por tanto las direcciones son:

  • 172.21.0.1     gateway
  • 172.21.0.2     postgresql
  • 172.21.0.3     odoo
  • 172.21.0.4     nginx

-Ejecución

Ejecutamos "docker-compose" en la carpeta donde esta el "docker-compose.yml" (carpeta nginx)

docker-compose up

Y podemos utilizar en el navegador de la máquina local:

  • http:/localhost:7080/           sale la pantalla de bienvenida de nginx
  • https:/localhost:7443/         sale la pantalla de bienvenida de nginx
  • http://localhost:/7080/web  falla
  • https://localhost:/7443/web sale la pantalla de odoo a traves de nginx
  • http://localhost:7069/          sale la pantalla de odoo directamente
  • http://172.21.0.3:8069/        sale la pantalla de odoo directamente
  • https://172.21.0.4:7443/        sale la pantall de bienvenida de nginx
  • https://172.21.0.4:7443/web  sale la pantall de bienvenida de nginx













Opción 2: Sin fijar las direcciones IP

-Crear el fichero de configuración nginx/odoo-nginx.conf

Que tendrá este contenido. OJO los nombres del host se obtienen del partado aliases: que hay en el apartado network de cada servicio en el fichero docker-compose.yml.


OJO: El debug se hace en las líneas de fondo azul y se muestran las variables

La línea de fondo amarillo soluciona alguna de las redirecciones a http (y las redirecciona a https)

#***********************************************************************
# 1. upstream: Definimos los servidores sobre los que se hará el PROXY
#***********************************************************************
upstream odoo16 {
server odoo_host:8069; # Obtenido del fichero docker-compose.yml apartado odoo.networks.odoo_network.aliases
}
#upstream nginx16 {
# server nginx_host:443; # Obtenido del fichero docker-compose.yml apartado odoo.networks.odoo_network.aliases
#}
# de momento no hacemos el chat
#upstream odoochat {
# server 127.0.0.1:8072;
# }

#***********************************************************************
# 2.1 server: Definimos el comportamiento para el https (p.443)
#***********************************************************************

server {
# 2.1.1 puerto
listen 443 ssl;
# 2.1.2 certificados obtenidos en el punto 2
ssl_certificate /etc/nginx/certs/wildcard2023Nginx.crt;
ssl_certificate_key /etc/nginx/certs/wildcard2023Nginx.rsa;
# 2.1.3 nombre del servidor (Utilizamos VS Code y analizamos la red
server_name nginx_host; # Obtenido del fichero docker-compose.yml apartado nginx.networks.odoo_network.aliases
# 2.1.4 donde se guardan los logs
access_log /var/log/nginx/odoo.access.log;
error_log /var/log/nginx/odoo.error.log;

# 2.1.5 otros parámetros
proxy_buffers 16 64k;
proxy_buffer_size 128k;

# 2.1.5 Solamente se escogerá este location para verificar que nginx funciona
#location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
#}

#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# 2.1.6 Aquí es donde realmente redirigimos al odoo
# El contenido de este location debería ir al "location /" pero como sabemos
# que odoo redirige automáticamente a /web, podemos tener este location
# pero repito, que lo normal es meter este contenido en "location /"
location / {
#location /web {
proxy_pass http://odoo16; # odoo16 se definió en "upstream"
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
#proxy_redirect off; #???????????

#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 https;

proxy_cache_bypass $http_upgrade;

#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_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
add_header X-debug-message "1. Passing to odoo16 host=$host ,remote_addr=$remote_addr ,proxy_add_x_forwarded_for=$proxy_add_x_forwarded_for ,scheme=$scheme server_port=$server_port ,http_upgrade=$http_upgrade ,request_uri=$request_uri" always;
#proxy_set_header X-Forwarded-Port $server_port;

}

# de momento no hacemos el chat
#location /longpolling {
#proxy_pass http://odoochat;
#}

# Este location es el que pone por omisión, y a veces va y otras veces no
# Es mucho mejor cambiarlo a location ~* /static/
#location ~* /web/static/ {

# 2.1.7 Para los recursos: ver
# Cualquier recurso que se encuentre en una carpeta intermedia que
# se llame "static" se recogerá del servidor odoo16.
# Normalmente es para recoger los js y los dibujos
location ~* /static/ {
proxy_cache_valid 200 60m;
proxy_buffering on;
expires 864000;
proxy_pass http://odoo16;
}
}

#***********************************************************************
# 2.2 server: Definimos el comportamiento para el http (p.82)
#***********************************************************************
#Create a new server block to rewrite http to https
server {
listen 80;
#listen [::]:80;
server_name nginx_host;
#Add the rewrite directive as below
add_header X-debug-message "2. Passing to odoo16 host=$host ,remote_addr=$remote_addr ,proxy_add_x_forwarded_for=$proxy_add_x_forwarded_for ,scheme=$scheme server_port=$server_port ,http_upgrade=$http_upgrade ,request_uri=$request_uri" always;
return 301 https://nginx_host$request_uri;
}
server {
listen 80;
#listen [::]:80;
#server_name nginx_host;
server_name localhost;
#1.Va pero no passa a http
#proxy_redirect http://localhost/web http://odoo16;
#2.???? Si va!!!!
return 301 https://localhost:7443$request_uri;

#Add the rewrite directive as below
#return 301 https://$host$request_uri;
#proxy_pass http://odoo16;
#return 301 https://odoo_host:8069$request_uri;
location / {
#location /web {
proxy_pass http://odoo16; # odoo16 se definió en "upstream"
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
#proxy_redirect off; #???????????

#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 https;

#proxy_cache_bypass $http_upgrade;

#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_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
add_header X-debug-message "3. Passing to odoo16 host=$host ,remote_addr=$remote_addr ,proxy_add_x_forwarded_for=$proxy_add_x_forwarded_for ,scheme=$scheme server_port=$server_port ,http_upgrade=$http_upgrade ,request_uri=$request_uri" always;
}
}



#***********************************************************************
# 1. upstream: Definimos los servidores sobre los que se hará el PROXY
#***********************************************************************
upstream odoo16 {
server odoo_host:8069; # Obtenido del fichero docker-compose.yml apartado odoo.networks.odoo_network.aliases
}
# de momento no hacemos el chat
#upstream odoochat {
# server 127.0.0.1:8072;
# }

#***********************************************************************
# 2.1 server: Definimos el comportamiento para el https (p.443)
#***********************************************************************

server {
# 2.1.1 puerto
listen 443 ssl;
# 2.1.2 certificados obtenidos en el punto 2
ssl_certificate /etc/nginx/certs/wildcard2023Nginx.crt;
ssl_certificate_key /etc/nginx/certs/wildcard2023Nginx.rsa;
# 2.1.3 nombre del servidor (Utilizamos VS Code y analizamos la red
server_name nginx_host; # Obtenido del fichero docker-compose.yml apartado nginx.networks.odoo_network.aliases
# 2.1.4 donde se guardan los logs
access_log /var/log/nginx/odoo.access.log;
error_log /var/log/nginx/odoo.error.log;

# 2.1.5 otros parámetros
proxy_buffers 16 64k;
proxy_buffer_size 128k;

# 2.1.5 Solamente se escogerá este location para verificar que nginx funciona
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}

#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# 2.1.6 Aquí es donde realmente redirigimos al odoo
# El contenido de este location debería ir al "location /" pero como sabemos
# que odoo redirige automáticamente a /web, podemos tener este location
# pero repito, que lo normal es meter este contenido en "location /"
location /web {
proxy_pass http://odoo16; # odoo16 se definió en "upstream"
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;

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 https;
}

# de momento no hacemos el chat
#location /longpolling {
#proxy_pass http://odoochat;
#}

# Este location es el que pone por omisión, y a veces va y otras veces no
# Es mucho mejor cambiarlo a location ~* /static/
# location ~* /web/static/ {

# 2.1.7 Para los recursos: ver
# Cualquier recurso que se encuentre en una carpeta intermedia que
# se llame "static" se recogerá del servidor odoo16.
# Normalmente es para recoger los js y los dibujos
location ~* /static/ {
proxy_cache_valid 200 60m;
proxy_buffering on;
expires 864000;
proxy_pass http://odoo16;
}
}

#***********************************************************************
# 2.2 server: Definimos el comportamiento para el http (p.82)
#***********************************************************************
#Create a new server block to rewrite http to https
server {
listen 80;
listen [::]:80;
server_name nginx_host;
#Add the rewrite directive as below
return 301 https://$host$request_uri;
}

Donde:

  • Se escucha peticiones https del puerto 443 (2.1 apartado server) y se redirigen las peticiones del puerto 80 al 443 (2.2 apartado server)
  • Se le indica la ruta del certificado y clave 
  • Se le indican las rutas donde guardar los logs de accesos y de errores
  • Se define en "location" el comportamiento del proxy y donde descargar  los recursos tales como js, imágenes etc

-Crear el fichero docker-compose.yml en la carpeta del post anterior

Que tendrá este contenido y  sustituirá al anterior docker-compose.yml y tendrá contenido único

version: '3.3'
services:
odoo:
container_name: odoo16_02
image: odoo:16.0
env_file: odoo16_pg13.env # environment file
depends_on:
- postgresql
ports:
- "7069:8069" #port mapping(custom-port:8069)
volumes:
- ./odoo-data:/var/lib/odoo
- ./odoo-conf:/etc/odoo
- ./odoo-adds:/odoo/extra-addons #SAME AS odoo.conf addons_path
networks:
odoo_network:
    aliases:
        - odoo_host
postgresql:
container_name: postgres_odoo_02
image: postgres:13
env_file: odoo16_pg13.env # environment file
volumes:
- ./postgresql-data:/var/lib/postgresql/data/pgdata ##SAME AS odoo16_pg13.env PGDAT [4]
networks:
odoo_network:
    aliases:
        - postgres_host
nginx:
container_name: nginx_odoo_02
image: nginx:latest
depends_on:
- odoo
ports:
- "7080:80"
- "7443:443"
#1. Copiar la CARPETA de certificados a la carpeta ./nginx-certs
#2. Copiar el FICHERO de configuración del proxy nginx.conf a la carpeta ./nginx-etc/nginx/conf.d
volumes:
- ./nginx-certs:/etc/nginx/certs
# - ./nginx-log:/var/log
# - ./nginx-conf/odoo-nginx.conf:/etc/nginx/conf.d/odoo-nginx.conf
- ./nginx-conf/odoo-nginx.conf:/etc/nginx/conf.d/default.conf
#--Edu (1)
networks:
odoo_network:
    aliases:
        - nginx_host
# En este caso, tambien damos nombres a los volúmnes compartidos
volumes:
odoo-data: {}
    odoo-conf: {}
    odoo-adds: {}
postgresql-data: {}
    nginx-certs: {}

networks:
odoo_network:
    # driver: bridge EN VERSIONES ANTERIORES DE DOCKER FUNCIONABA.
# Ahora hay que comentar esta opción pues sale el error:
# "ERROR: plugin "bridge;" not found"

Se definen los puertos a utilizar y los mapeos (volumenes docker) del servidor físico y el enlace al servidor virtual dockerizado.

7. ¿Como se pueden ver las direcciones IP?

En VS vamos al símbolo de docker - NETWORKS y en nuestra red apretamos el botón derecho del mouse y seleccionamos inspect


Y nos muestra un fichero de configuración json donde se puede ver las direcciones IP4

{
    "Name": "prova04_odoo_network",
    "Id": "79a4585b674d1e8d80a17073e91663206b8702a48c914800e022b152d2b9c013",
    "Created": "2024-01-03T14:39:30.696893035+01:00",
    "Scope": "local",
    "Driver": "bridge",
    "EnableIPv6": false,
    "IPAM": {
        "Driver": "default",
        "Options": null,
        "Config": [
            {
                "Subnet": "172.21.0.0/16",
                "Gateway": "172.21.0.1"
            }
        ]
    },
    "Internal": false,
    "Attachable": true,
    "Ingress": false,
    "ConfigFrom": {
        "Network": ""
    },
    "ConfigOnly": false,
    "Containers": {
        "242451e0c89495d64305e186429508b79781aa939b714ebaceb9dbfdee2f38fd": {
            "Name": "odoo16_02",
            "EndpointID": "c47c3ff3e7d5e4269976963b47ecbb19ccd675ada631fd253344f37d6040c8ac",
            "MacAddress": "02:42:ac:15:00:03",
            "IPv4Address": "172.21.0.3/16",
            "IPv6Address": ""
        },
        "5b727c3e15b40f7f5e6ae0f2a0b33f8e192a27757fd6e38dbd4cd74dcb3fd2ad": {
            "Name": "postgres_odoo_02",
            "EndpointID": "dda9bd062a5c735592d3d9f04786497bedf714528a0776d7dd38cc7192277c6a",
            "MacAddress": "02:42:ac:15:00:02",
            "IPv4Address": "172.21.0.2/16",
            "IPv6Address": ""
        },
        "627344b0d41cc470d1c98a224ff02992d7bdd7ff38525acee4f2083c21ea9e73": {
            "Name": "nginx_odoo_02",
            "EndpointID": "ce2fad2cc3a0d12a89de56186cf82f742c099f02c3c4f7c2bed7dbadfc589c5f",
            "MacAddress": "02:42:ac:15:00:04",
            "IPv4Address": "172.21.0.4/16",
            "IPv6Address": ""
        }
    },
    "Options": {},
    "Labels": {
        "com.docker.compose.network": "odoo_network",
        "com.docker.compose.project": "prova04",
        "com.docker.compose.version": "1.29.2"
    }
}


8. Ejecución

Ejecutamos "docker-compose" en la carpeta donde esta el "docker-compose.yml" (carpeta nginx)

docker-compose up

Y podemos utilizar en el navegador de la máquina local:

  • http:/localhost:7080/             redirecciona a https://localhost:7443/web/database/selector 
  • https:/localhost:7443/           redirecciona a https://localhost:7443/web/database/selector 
  • http://localhost:7080/web     falla porque cambia de http a https sin cambiar el puerto
  • https://localhost:7443/web    redirecciona a https://localhost:7443/web/database/selector 
  • http://localhost:7069/            sale la pantalla de odoo  http://localhost:7069/web/database/selector
Ojo si hacemos en el navegador http://odoo_host:8089, aparece error. O sea no se accede al DNS


9. Parámetros nginx

1. X-Forwarded-Proto: valor   siendo valor (http o https), se usa para definir el protocolo. Ejemplo de uso:

proxy_set_header X-Forwarded-Proto https;

2. X-Forwarded-For: <client>, <proxy1>, <proxy2>  se utiliza para pasar la IP del cliente y si se quiere las Ips de los proxys por donde pasa, separadas por comas. Si se utiliza un proxy, en el ejemplo de abajo se pasa la dirección del proxy ($host)

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

3. X-Real-IP <ip>  Para indicar el nombre de dominio del servidor (para hosts virtuales) y el puerto. Ejemplo

proxy_set_header X-Real-IP $remote_addr;

4. Host: <host>:<port>  Para indicar el nombre de dominio del servidor (para hosts virtuales) y el puerto. Ejemplo

proxy_set_header Host $host;

4. Upgrade: <host>:<port>  Para indicar el nombre de dominio del servidor (para hosts virtuales) y el puerto. Ejemplo


10. Variables nginx

1. $host : Contiene en este orden de precedencia: 

  • nombre del host de la line de la request.
  • nombre del host  del campo "Host" de la cabecera de la request.
  • nombre del servidor que coincide con una request.
Esta variable no contiene el puerto mienttras que $http_host suele incluirlo.

2. $http_host: Contiene el valor del campo "Host" de una cabecera http de una request

3. $server_name: Nombre del servidor virtual que procesó la request. Si "server" contiene múltiples nombres, solo se considerará el primero.

4. $http_upgrade: Tiene el valor del Header "Upgrade" que se utiliza para poder utilizar web sockets que mantienen la conexión abierta mucho tiempo







No hay comentarios :

Publicar un comentario