Servir um site IIS através do nginx (proxy_pass) não exibe CSS, imagens ou js (404 não encontrado)

Servir um site IIS através do nginx (proxy_pass) não exibe CSS, imagens ou js (404 não encontrado)

Eu tenho um proxy reverso nginx em execução no Ubuntu 14.04 LTS. Quando as solicitações são feitas ao proxy nginx, ele as passa para um servidor IIS que contém um site (padrão). Parece renderizar o HTML corretamente, mas infelizmente o servidor responde com um erro 404 para todos os outros ativos.

Aqui está o /etc/nginx/nginx.confarquivo:

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/*;
}

Aqui está defaulta configuração do meu 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;
    }
}

Aqui está o resultado da solicitação para example.comou www.example.com(o arquivo hoststemfoi alterado):

insira a descrição da imagem aqui

Achei que talvez fosse um problema com o fato de não haver nenhuma rootdiretiva na configuração do meu servidor - mas eu realmente não sabia por onde começar com esse problema. No mínimo, sei que não é um problema com o servidor IIS em si, porque posso navegar perfeitamente no host local.

Alguma ideia? Muito obrigado antecipadamente.

Editar: aqui estão meus logs de erros também:

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/"

Responder1

No final, encontrei uma solução - eu estava forçando o servidor nginx a tentar servir arquivos localmente usando o arquivo try_files $uri $uri/ =404;. Tudo o que tive que fazer foi remover esta linha e funcionou perfeitamente :)

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

Responder2

Começando com o problema menos provável, 80 é a porta correta para proxy_pass http://104.46.52.226/? Se não, em qual porta isso está escutando? Se for, digamos, 5.000, você precisa de proxy_passhttp://104.46.52.226:5000; Este provavelmente não é o seu problema.

Você precisa definir alguns cabeçalhos no bloco location para que o IIS possa usá-los:

    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:

Como o Nginx está realmente emitindo a solicitação ao nosso servidor web, estamos adicionando cabeçalhos à solicitação para que o servidor web tenha todas as informações necessárias.

Ele também fala sobre cache.

O arquivo /etc/nginx/sites-enabled/armari.comparece ter uma server {linha comentada. Esse é um dos erros. TODOS os arquivos /etc/nginx/sites-enabled/precisam estar funcionando para que o Nginx se sinta bem. Se for esse arquivo, você provavelmente não colou o #(código inicial do comentário). Ou talvez você tenha mudado desde que o erro aconteceu.

informação relacionada