Servir un sitio web IIS a través de nginx (proxy_pass) no muestra CSS, imágenes o js (404 no encontrado)

Servir un sitio web IIS a través de nginx (proxy_pass) no muestra CSS, imágenes o js (404 no encontrado)

Tengo un proxy inverso nginx ejecutándose en Ubuntu 14.04 LTS. Cuando se realizan solicitudes al proxy nginx, las pasa a un servidor IIS que contiene un sitio web (predeterminado). Parece representar bien el HTML, pero desafortunadamente el servidor responde con un error 404 para todos los demás activos.

Aquí está el /etc/nginx/nginx.confarchivo:

user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile off;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Logging Settings
    ##

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

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Aquí está defaultla configuración de mi servidor nginx:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    index index.php index.html index.htm;

    server_name example.com www.example.com;

    location / {
        try_files $uri $uri/ =404;
        proxy_pass http://104.46.52.226/;
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Aquí está el resultado de la solicitud a example.como www.example.com(el archivo de hoststienecambiado):

ingrese la descripción de la imagen aquí

Pensé que tal vez era un problema por el hecho de que no hay ninguna rootdirectiva en la configuración de mi servidor, pero realmente no sabía por dónde empezar con ese problema. Al menos sé que no es un problema con el servidor IIS en sí, porque puedo navegar perfectamente por el host local.

¿Alguna idea? Muchas gracias de antemano.

Editar: Aquí también están mis registros de errores:

2015/10/13 09:41:10 [emerg] 3069#0: invalid number of arguments in "proxy_pass" directive in /etc/nginx/sites-enabled/armari.com:31
2015/10/13 10:12:33 [emerg] 3606#0: "listen" directive is not allowed here in /etc/nginx/sites-enabled/armari.com:2
2015/10/13 13:39:18 [error] 3911#0: *1 open() "/usr/share/nginx/html/css/new-web.css" failed (2: No such file or directory), client: 188.39.188.214, server: armari.com, request: "GET /css/new-web.css HTTP/1.1", host: "www.armari.com", referrer: "http://www.armari.com/"
2015/10/13 13:39:18 [error] 3911#0: *3 open() "/usr/share/nginx/html/css/nivo/themes/default/default.css" failed (2: No such file or directory), client: 188.39.188.214, server: armari.com, request: "GET /css/nivo/themes/default/default.css HTTP/1.1", host: "www.armari.com", referrer: "http://www.armari.com/"
2015/10/13 13:39:18 [error] 3911#0: *4 open() "/usr/share/nginx/html/css/nivo/nivo-slider.css" failed (2: No such file or directory), client: 188.39.188.214, server: armari.com, request: "GET /css/nivo/nivo-slider.css HTTP/1.1", host: "www.armari.com", referrer: "http://www.armari.com/"
2015/10/13 13:39:21 [error] 3911#0: *8 open() "/usr/share/nginx/html/css/new-web.css" failed (2: No such file or directory), client: 188.39.188.214, server: armari.com, request: "GET /css/new-web.css HTTP/1.1", host: "armari.com", referrer: "http://armari.com/"
2015/10/13 13:39:21 [error] 3909#0: *10 open() "/usr/share/nginx/html/css/nivo/themes/default/default.css" failed (2: No such file or directory), client: 188.39.188.214, server: armari.com, request: "GET /css/nivo/themes/default/default.css HTTP/1.1", host: "armari.com", referrer: "http://armari.com/"
2015/10/13 13:39:21 [error] 3909#0: *11 open() "/usr/share/nginx/html/css/nivo/nivo-slider.css" failed (2: No such file or directory), client: 188.39.188.214, server: armari.com, request: "GET /css/nivo/nivo-slider.css HTTP/1.1", host: "armari.com", referrer: "http://armari.com/"

Respuesta1

Al final encontré una solución: estaba obligando al servidor nginx a intentar servir archivos localmente usando el archivo try_files $uri $uri/ =404;. Todo lo que tuve que hacer fue eliminar esta línea y funciona perfectamente :)

location / {
    proxy_pass http://104.46.52.226/;
}

Respuesta2

Comenzando con el problema menos probable, ¿80 es el puerto correcto para proxy_pass http://104.46.52.226/? Si no, ¿en qué puerto se escucha? Si es, digamos, 5000, necesitas proxy_passhttp://104.46.52.226:5000; Probablemente este no sea tu problema.

Debe configurar algunos encabezados en el bloque de ubicación para que IIS pueda usarlos:

    proxy_set_header  x-real-IP        $remote_addr;
    proxy_set_header  x-forwarded-for  $proxy_add_x_forwarded_for;
    proxy_set_header  host             $http_host;

CitarKarl Seguin:

Dado que Nginx en realidad está emitiendo la solicitud a nuestro servidor web, agregamos encabezados a la solicitud para que el servidor web tenga toda la información necesaria.

También habla de almacenamiento en caché.

Parece que el archivo /etc/nginx/sites-enabled/armari.comtiene una línea comentada server {. Ese es uno de los errores. TODOS los archivos necesarios /etc/nginx/sites-enabled/deben funcionar para que Nginx se sienta bien. Si ese es este archivo, probablemente simplemente no pegaste el #(código de inicio del comentario). O quizás lo cambiaste desde que ocurrió el error.

información relacionada