PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nginx (Revproxy) + ModSecurity -> IIS 7.x Backend



GinoHereIam
05.02.14, 09:44
Hi liebe Community

ich hoffe ich bin im richtigen Thread.
Ich habe ein Thema, daran arbeite ich seit Herbst und mir geht echt die Ideen aus.

Ich habe einen Revproxy/Loadbalancer Cluster aus 2 Nginx Webserver 1.5.10 (aktuelle Version Stand 05.02.2014), die Clusterfunktion stelle ich mit Keepalived her. Jeder Revproxy wurde mit ModSecurity 2.7.5 und die inoffizielle Sticky Cookie kompiliert. Ursprünglich war das Nginx-Cluster nur zur SSL Termination geplant und zur Lastenverteilung HAProxy (ebenfalls als Cluster).
Als Backend habe ich jeweils 3 IIS 7.x Webserver (Livesystem bzw. Produktiv).

alte Konstellation:
Client -> (SSL) -> Nginx (Terminiert) -> (http/s) -> HAProxy (LB) -> (http) --> 3 IIS Webserver

Da das allerdings noch weniger funktioniert und ich nur langsam meine Fehlerquellen ausschließen kann, habe ich die HAProxy weggelassen.
Die IIS können nicht die Fehlerquelle sein, da die wie gesagt produktiv im Einsatz sind mit Apache Revproxy momentan. (Apache ist allerdings zu langsam, darum der Wechsel).

neue Konstellation:
Client -> (SSL) -> Nginx (Terminiert/LB) -> (http/s) --> 3 IIS Webserver

Meine Nginx-Konfig (nginx.conf):

upstream haproxy {
#Sticky-Bit
#sticky parameter: name=meinedomain domain=domain.com path=/;

#keepalive oder least_conn, nicht beides
keepalive 2000;
#least_conn;

#Webserver
server 192.168.x.x:443;
server 192.168.x.x:443;
server 192.168.x.x:443;

#HAProxy
#server 192.168.x.x:8888;
}

#HTTPS DOMAINS
server {
listen 443;
server_name www.domain.com;

ssl on;
ssl_certificate /etc/ssl/private/domain.pem;
ssl_certificate_key /etc/ssl/private/domain.key;

#ssl_session_timeout 5m;

ssl_protocols SSLv2 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM;
ssl_prefer_server_ciphers on;

client_max_body_size 20M;

location /nginx-status {
stub_status on;
access_log off;
allow all;
}
location / {
#Modsecurity
ModSecurityEnabled on;
ModSecurityConfig modsecrules/modsecurity.conf;
#Rewrite Rules
#rewrite ^/(.*) https://www.domain.com/Login.aspx permanent

root *.aspx;
index Login.aspx;
proxy_set_header Connection "";
proxy_intercept_errors on;
proxy_buffering on;
proxy_buffer_size 128k;
proxy_buffers 256 16k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_max_temp_file_size 0;

#Proxyweiterleitung auf LB VIP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_read_timeout 360s;
proxy_pass https://haproxy;

}
}

Soo. Meine Probleme:
1) Nginx terminiert seinen Prozess
2014/02/05 09:52:43 [alert] 22296#0: worker process 25711 exited on signal 11

2) Die Verbindung wird sofort geschlossen nachdem die Website geöffnet wurde!!
2014/02/04 16:41:23 [error] 27111#0: *521 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.x.x, server: www.domain.com, request: "GET /CMS/Scripts/jquery-1.9.0.min.js HTTP/1.1", upstream: "https://192.168.x.x:443/CMS/Scripts/jquery-1.9.0.min.js", host: "www.domain.com", referrer: "https://www.domain.com/CMS/Translation.aspx"

Ich hoffe hier kann mir jemand endlich helfen!!
Vielen Dank!

Gruß
Gino

GinoHereIam
07.02.14, 15:01
Ok, also beim 1. Fall handelt es sich um ein segmentation fault. Das heißt die software versucht auf einen Speicherbereich zuzugreifen für den es nicht reserviert wurde. Dem entsprechend führt das auch zu einem Kernelerror.
Ich kann also nur hoffen das ModSecurity gefixt wird. An Nginx liegt das nicht. Funktioniert einwandfrei ohne die WAF (Web Application Firewall).

kernel: [6062665.616763] nginx[8497]: segfault at 10 ip 00007fab654c2581 sp 00007fff401c4db0 error 4 in libapr-1.so. 0.4.6[7fab654aa000+30000]

Das ist mir Monate nicht aufgefallen. Blöd.