DNS, nginx Konfiguration



  • Hallo,

    ich bin mir nicht sicher ob es die pfSense betrifft, aber vielleicht gibt es hier versierte Leute:
    Ich habe einen Linuxserver, wo eine Webapplikation auf Port 8069 läuft. Es ist das Warenwirtschaftsprogramm odoo

    Nun möchte ich intern im Lan via odoo/ darauf im Browser zugreifen. Das klappt. ganzer Hostname: odoo.mycompany.mylocal

    Aber ich habe eine Portweiterleitung eingerichtet, damit man extern auch darauf zugreifen kann. HIerfür habe ich eine öffentliche DNS (portal.mycompany.com)die auf meine öffentliche IP zeigt. Port 80 wird in der pfSense auf den Webserver weiter geleitet.

    Mein Problem:
    Rufe ich extern via "http://portal.mycompany.com" auf, wird weiterleitet an "odoo/" .. und da dies der interne hostname ist, klappt das natürlich nicht.

    Nun bin ich mir nicht sicher ob nginx das Problem oder pfSense ist:

    Die Details:
    hostname des servers: odoo
    Ip wird über DHCP bezogen, die ich statisch in der pfSense hinterlegt habe: 192.168.0.202
    pfSense: hier habe ich eine Host Überschreibung erstellt: portal => mycompany.com zeigt auf 192.168.0.202

    nano /etc/nginx/conf.d/odoo.conf

    #worker_processes  1;
    
    #events {
    #    worker_connections  1024;
    #}
    
            upstream odoo {
                    server portal.mycompany.com:8069 weight=1 fail_timeout=0;
            }
    
            upstream odoo-im {
                    server portal.mycompany.com:8072 weight=1 fail_timeout=0;
            }
    
    
    
            server {
            listen  80;
            server_name portal.mycompany.com;
    
            location /socket.io {
    #               proxy_buffer_size 128k;
                    proxy_send_timeout 600s;
                    proxy_read_timeout 600s;
                    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
    
                    proxy_pass   http://127.0.0.1:8068;
                    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_set_header X-Forwarded-Proto https;
                    proxy_redirect off;
            }
    
            location / {
                    proxy_redirect off;
                    proxy_pass http://odoo;
            }
    
            location /longpolling {
                    proxy_pass http://odoo-im;
            }
    
            location /web/static/ {
                    proxy_cache_valid 200 60m;
                    proxy_buffering on;
                    expires 864000;
                    proxy_pass http://odoo;
            }
     }
    
    

    Hat jemand eine Idee wo der Fehler liegt?

    Danke!



  • Hallo,

    die pfSense ist nicht das Problem, die kann für deine (eigenwillige) Konfiguration nix. Sie kann dir aber helfen, es zu lösen.

    Du hast also eine Portweiterleitung von der WAN IP Port 80 auf die interne IP des Server Port 8069. Du musst den internen Clients eben dasselbe bieten.
    Am einfachsten löst du das mit NAT Reflection. Öffne dazu die NAT-Regel für die Weiterleitung, da gibt es unten die Option "NAT Reflection", wähle hier "NAT + Proxy" aus.
    Dann sollte die Sache auch von intern einwandfrei klappen.

    Allerdings sieht es dann am Webserver so aus, als ob die interenen Zugriffe von der pfSense selbst kommen würden. Du siehst also nicht die tatsächliche Quell-IP.
    Einzige Alternative ist nur, den Webserver von intern über den tatsächlichen Port anzusprechen.

    Grüße



  • Nee ich denke die pfSense ist hier komplett außen vor bei dem Problem. Die NAT Reflection macht in diesem Fall der NGINX Proxy. Dieser gibt dir auf Port 80 die Inhalte vom Port 8069. Deswegen ist es auch korrekt wenn Man nur eine NAT Regel auf der pfSense von Port 80 (Internet) auf Port 80 (192.168.0.202) macht.

    Das Problem wird der proxy_pass/location Parameter in der nginx Konfiguration sein. Kenne mich aber zu wenig mit nginx aus. Bei Apache hat man das mittels reverse Proxy umgesetzt:

    Beispiel:

    <VirtualHost *:443>
    ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass / https://10.xxx.yyy.100:9251/
    ProxyPassReverse / https://10.xxx.yyy.100:9251/
    ServerName selfservice.xxxxxxx.de
    CustomLog /var/log/apache2/access_selfservice.log combined
    ErrorLog /var/log/apache2/error_selfservie.log
    SSLProxyEngine On
    SSLEngine on
    
    SSLCertificateFile      /etc/apache2/ssl/startssl/selfservice.xxxxxxxxx.de/selfservice.xxxxxxxxx.de.crt
    SSLCertificateKeyFile   /etc/apache2/ssl/startssl/selfservice.xxxxxxxxx.de/privkey.key
    SSLCertificateChainFile /etc/apache2/ssl/startssl/selfservice.xxxxxxxxx.de/sub.class1.server.ca.pem
    
    
    <Location />
        HostnameLookups On
        HostnameLookups Double
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
        Allow from 194.yyy.xxx.yyy
        </Location>
    
    #### Check deaktivieren so lange Zertifikat nicht zu Hostnamen passt ####
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off
    #### Check deaktivieren so lange Zertifikat nicht zu Hostnamen passt ####
    
    </VirtualHost>
    


  • Hallo,

    ich habe es nun so gelöst, das alles in der nginx config, was "http://odoo" war auf "http://portal.mycompany.com" abgeändert habe.

    Nun wird alles auf portal.mycolmpany.com umgeleitet und die pfsense löst dies intern eh auf die interne IP auf.
    Scheint zu klappen!


  • LAYER 8 Moderator

    @unique24 said in DNS, nginx Konfiguration:

    Scheint zu klappen!

    OK das ist doch mal was :)
    ABER: Externe Erreichbarkeit von einer Warenwirtschaft via Port 80? Das solltet ihr nochmal überlegen. Das kann doch bitte nicht euer ernst sein ;)


Log in to reply