通过nginx(proxy_pass)服务IIS网站不显示CSS,图像或js(404找不到)

我有一个在Ubuntu 14.04 LTS上运行的nginx反向代理。 当向nginx代理发出请求时,会将其传递给包含一个(默认)网站的IIS服务器。 它似乎呈现HTML罚款,但不幸的是,服务器响应所有其他资产404错误。

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

这是我的default nginx服务器configuration:

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

以下是对example.comwww.example.com的请求结果(hosts文件已更改):

在这里输入图像说明

我想也许这是一个问题,事实上,在我的服务器configuration没有root指令 – 但是我真的不知道从哪里开始的问题。 至less我知道它不是IIS服务器本身的问题,因为我可以完美地浏览本地主机。

有什么想法吗? 首先十分感谢。

编辑:这也是我的错误日志:

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

最后find了一个解决scheme – 我迫使nginx服务器尝试使用try_files $uri $uri/ =404;在本地提供文件try_files $uri $uri/ =404; 。 我所要做的只是删除这条线,它完美的作品:)

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

从最不可能的问题开始,80是proxy_pass http://104.46.52.226/的正确端口? 如果没有,这是哪个端口监听? 如果是5000,则需要proxy_pass http://104.46.52.226:5000 ; 这可能不是你的问题。

您需要在位置块中设置一些标头,以便IIS可以使用它们:

  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; 

引用卡尔·塞甘 :

由于Nginx实际上正在向我们的Web服务器发出请求,因此我们正在向请求添加标头,以便Web服务器具有所有必要的信息。

他还谈到caching。

文件/etc/nginx/sites-enabled/armari.com看起来像有一个注释掉的server {行。 这是错误之一。 /etc/nginx/sites-enabled/所有文件都需要为Nginx工作才能感觉良好。 如果这是这个文件,你可能只是没有粘贴# (注释开始代码)。 或者也许你从错误发生以来就改变了它。