Stell dir vor, du hast eine (in Zahlen 1) fixe IP-Adresse. Und du hast deinen On-Premise-Exchange hinter dieser IP auf der Firewall konfiguriert und nutzt OWA, also das Web Interface Outlook Web Access. Ganz einfach, den Port 443 auf deiner Firewall auf deine interne IP vom Mailserver zeigen lassen, fertig.

Jetzt willst du aber zum Beispiel einen Gitlab Server oder eine andere Webanwendung auch mit https von außen zugänglich machen. Du hast ein paar Möglichkeiten. Am IIS der neben Exchange rennt einen Proxy einrichten oder eben jeden anderen Webserver als Proxy hernehmen.

Ich nehme halt gern Nginx für so ziemlich alle Web-Sachen, hab früher nur Apache genommen, aber mit PHP-FPM ist Nginx laut Benchmarks besser.

Auf jeden Fall, hast du sicher gegoogelt nach dem OWA nginx proxy. Dann findest du eine Config, die so ähnlich ausschaut wie diese hier:

server {
        listen 80;
        server_name mail.rent-a-ninja.org autodiscover.rent-a-ninja.org;

        error_log /var/log/nginx/exchange-error.log;
        access_log /var/log/nginx/exchange-access.log;

        location ^~ /.well-known/acme-challenge/ {
            root /var/www/;
        }

        location / {
            return 301 https://$host$request_uri;
        }
}

server {
        listen 443;
        server_name mail.rent-a-ninja.org autodiscover.rent-a-ninja.org;

        ssl     on;
        ssl_certificate      /etc/letsencrypt/live/mail.rent-a-ninja.org/fullchain.pem;
        ssl_certificate_key  /etc/letsencrypt/live/mail.rent-a-ninja.org/privkey.pem;
        ssl_session_timeout     5m;

        proxy_read_timeout      360;

        proxy_http_version 1.1;
        proxy_pass_request_headers on;

        proxy_pass_header       Date;
        proxy_pass_header       Server;

        proxy_headers_hash_max_size 512;

        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        Accept-Encoding "";

        more_set_input_headers 'Authorization: $http_authorization';
        proxy_set_header Accept-Encoding "";
        more_set_headers -s 401 'WWW-Authenticate: Basic realm="mail.rent-a-ninja.org"';

        location = / {
            return 301 https://$host/owa;
        }

        location /owa           { proxy_pass https://192.168.67.10/owa; }
        location /OWA           { proxy_pass https://192.168.67.10/owa; }
        location /EWS          { proxy_pass https://192.168.67.10/EWS; }
        location /ews          { proxy_pass https://192.168.67.10/EWS; }
        location /Microsoft-Server-ActiveSync { proxy_pass https://192.168.67.10/Microsoft-Server-ActiveSync; }
        location /mapi           { proxy_pass https://192.168.67.10/mapi; }
        location /MAPI          { proxy_pass https://192.168.67.10/mapi; }
        location /rpc           { proxy_pass https://192.168.67.10/Rpc; }
        location /RPC           { proxy_pass https://192.168.67.10/Rpc; }
        location /oab            { proxy_pass https://192.168.67.10/OAB; }
        location /OAB            { proxy_pass https://192.168.67.10/OAB; }
        location /autodiscover           { proxy_pass https://192.168.67.10/Autodiscover; }
        location /Autodiscover           { proxy_pass https://192.168.67.10/Autodiscover; }

        error_log /var/log/nginx/exchange-ssl-error.log;
        access_log /var/log/nginx/exchange-ssl-access.log;

}

Na, das war ja einfach.  Leider sagt

 nignx -t 

aber irgendwas mit „more_set_headers kenn ich nicht„. Noch immer kein Thema – auch das kannst du googeln. Dann findest du was über das Paket nginx-extras und oder libnginx-mod-http-headers-more-filter. Super easy,

 sudo apt install nginx-extras libnginx-mod-http-headers-more-filter

Und schon geht’s… NICHT!

Da denkst du dir sicher sowas wie: „schweinerei, was ist da los?„. Wenn du das alles gemacht hast und eventuell mal ein anderes Repo für nginx genommen hast, kann es sein, dass die Config-Files für Module nicht genutzt werden. 🙁

Des Rätsels Lösung besteht also darin zu schauen ob ganz oben in der /etc/nginx/nginx.conf die modules-enabled included werden.

...
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf; #<-- diese Ziel hier!

events {
...

Mit der Zeile geht es dann, versprochen (außer du hasst Standardauthentifizierung im IIS bei EWS und MAPI nicht eingeschalten) – sonst musst halt anrufen.

%d Bloggern gefällt das: