A exibição de um site do IIS por meio do nginx (proxy_pass) não exibe CSS, imagens ou js (404 não encontrados)

1

Eu tenho um proxy reverso nginx rodando no Ubuntu 14.04 LTS. Quando são feitas solicitações ao proxy nginx, ele é passado para um servidor IIS contendo um site (padrão). Parece renderizar o HTML bem, mas infelizmente o servidor responde com um erro 404 para todos os outros recursos.

Aqui está o arquivo /etc/nginx/nginx.conf :

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á minha configuração do servidor default 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;
    }
}

Veja o resultado da solicitação para example.com ou www.example.com (o arquivo de hosts foi alterado):

Euimagineiquetalvezfosseumproblemacomofatodenãohaverumadiretivarootnaconfiguraçãodomeuservidor-maseurealmentenãosabiaporondecomeçaresseproblema.NomínimoeuseiquenãoéumproblemacomopróprioservidorIIS,porqueeupossoprocurarolocalhostperfeitamente.

Algumaideia?Muitoobrigadoantecipadamente.

Editar:aquiestãoosmeusregistrosdeerrotambém:

2015/10/1309:41:10[emerg]3069#0:invalidnumberofargumentsin"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/"
    
por jonny 13.10.2015 / 13:59

2 respostas

2

Encontrei uma solução no final - estava forçando o servidor nginx a tentar exibir arquivos localmente usando o try_files $uri $uri/ =404; . Tudo que eu tive que fazer foi remover essa linha e funciona perfeitamente:)

location / {
    proxy_pass http://104.46.52.226/;
}
    
por 14.10.2015 / 09:43
0

Começando com o problema menos provável, 80 é a porta correta para proxy_pass http://104.46.52.226/ ? Se não, qual porta é essa escuta? Se for, digamos, 5000, você precisa do proxy_pass link ; Isso provavelmente não é problema seu.

Você precisa definir alguns cabeçalhos no bloco de localização 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;

Para citar Karl Seguin :

Since Nginx is actually issueing the request to our web server, we are adding headers to the request so that the web server has all necessary informaton.

Ele também fala sobre armazenamento em cache.

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

    
por 13.10.2015 / 21:41