2015-11-19 60 views
1

我对nginx有一个奇怪的问题。我正在使用1.8.0版本并使用Web服务器地址,我可以成功地从Web服务器地址提供文件,但不能从网站地址提供!nginx为路径上存在的文件抛出404错误

Web服务器地址:aoaapls00109la.stg-example.com 网站地址:stg.showdb.vod.example.com

我有一台服务器块的设置是这样的:

server { 
     listen  80; 
     server_name aoaapls00109la.stg-example.com stg.showdb.vod.example.com stg.showdb.vod; 

     location/{ 
      add_header Access-Control-Allow-Origin "*"; 
      root /opt/www/webserver/nginx/html; 
      index index.html index.htm; 
      access_log logs/stg.showdb.vod.access.log; 
      error_log logs/stg.showdb.vod.error.log; 
     } 

     location ^/videos/ { 
      root /opt/www/webserver/nginx/html/videos; 
      index index.html index.htm; 
      error_log logs/videos_error.log; 
     } 
    } 

而且我在“视频”位置下有一个包含文件的目录。 NGINX运行一个名为“showdb”用户,所以这些文件是由用户拥有:

[[email protected] ~]# ls -ld /opt/www/webserver/nginx/html/videos 
drwxr-xr-x. 3 showdb showdb 4096 Nov 18 13:25 /opt/www/webserver/nginx/html/videos 

    [[email protected] ~]# ls -lh /opt/www/webserver/nginx/html/videos 
total 2.8G 
-rw-rw-r--. 1 showdb showdb 738M May 12 2015 1681_Scarlett_Johansson_Repeat.mp4 
-rw-rw-r--. 1 showdb showdb 30K May 11 2015 200X200.jpg 
-rw-r--r--. 1 showdb showdb 260 Nov 18 10:44 crossdomain.xml 
-rw-rw-r--. 1 showdb showdb 238M May 12 2015 some_guy_TS_0260-05122015.mp4 
-rw-r--r--. 1 showdb showdb 63 Jun 3 07:10 index.html 
-rw-rw-r--. 1 showdb showdb 302M May 12 2015 LNWSM_101314_SHOW0112_med_clean.mp4 
-rw-rw-r--. 1 showdb showdb 864M May 5 2015 LNWSM_101314_SHOW0112.mp4 
-rw-rw-r--. 1 showdb showdb 331M May 12 2015 LNWSM_101314_SHOW0112_sm_clean.mp4 
-rw-rw-r--. 1 showdb showdb 23K May 15 2015 some_guy_logo.png 
-rw-rw-r--. 1 showdb showdb 391M May 15 2015 RK119_EP_0514-15.mp4 
-rw-rw-r--. 1 showdb showdb 24K May 8 2015 SNL_40_COMPANY_16x9_1_SNL.png 
-rw-rw-r--. 1 showdb showdb 160K May 12 2015 TSJF_LOGO.png 
drwxrwxr-x. 5 showdb showdb 4.0K Nov 19 15:17 webvtt_files 

而且我注意到,如果我使用的第一个DNS名称为Web服务器本身,我可以成功地浏览和查看“视频”文件夹的内容。

,卷曲演示,我可以使用Web服务器名称编辑部地址从视频目录访问文件:

#curl http://aoaapls00109la.stg-example.com/videos/index.html 
Video Store located on the server aoaapls00109la.stg-example.com 

但是,如果使用的网站地址,而不是访问索引文件像上面我得到一个404 !

curl http://stg.showdb.vod.example.com/videos/index.html 
<html> 
<head><title>404 Not Found</title></head> 
<body bgcolor="white"> 
<center><h1>404 Not Found</h1></center> 
<hr><center>nginx/1.8.0</center> 
</body> 
</html> 

而对'videos'目录中的所有文件都会发生同样的行为。更糟糕的是,没有被提供并显示404的文件在访问或错误日志中不会产生任何活动!

如果我在浏览器的一个选项卡中显示来自Web服务器地址的相同文件,我可以看到相同的位置,它显示了在Web服务器地址下成功显示的同一个文件。

这里是整个nginx的配置,以防可能有一些线索,为什么发生这种情况:

#user nobody; 
worker_processes 1; 

error_log logs/error.log; 
#error_log logs/error.log notice; 
#error_log logs/error.log info; 

#pid  logs/nginx.pid; 
# 
user showdb; 


events { 
    worker_connections 1024; 
} 


http { 
    include  mime.types; 
    default_type application/octet-stream; 

    #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
    #     '$status $body_bytes_sent "$http_referer" ' 
    #     '"$http_user_agent" "$http_x_forwarded_for"'; 

    #access_log logs/access.log main; 

    sendfile  on; 
    #tcp_nopush  on; 

    #keepalive_timeout 0; 
    keepalive_timeout 65; 

    #gzip on; 

    server { 
     listen  80; 
     server_name localhost; 

     #charset koi8-r; 

     access_log logs/host.access.log; 

     location/{ 
      root html; 
      index index.html index.htm; 
     } 

     #error_page 404    /404.html; 

     # redirect server error pages to the static page /50x.html 
     # 
     error_page 500 502 503 504 /50x.html; 
     location = /50x.html { 
      root html; 
     } 



    } 

    # another virtual host using mix of IP-, name-, and port-based configuration 
    # 
    server { 
     listen  80; 
     server_name aoaapls00109la.stg-example.com stg.showdb.vod.example.com stg.showdb.vod; 

     location/{ 
      add_header Access-Control-Allow-Origin "*"; 
      root /opt/www/webserver/nginx/html; 
      index index.html index.htm; 
      access_log logs/stg.showdb.vod.access.log; 
      error_log logs/stg.showdb.vod.error.log; 
     } 

     location ^/videos/ { 
      root /opt/www/webserver/nginx/html/videos; 
      index index.html index.htm; 
      error_log logs/videos_error.log; 
     } 
    } 


    server { 
     listen  80; 
     server_name stg.cdn.showsys.example.com stg.cdn.showsystem.example.com; 
     add_header Access-Control-Allow-Origin "*"; 
      location/{ 
      root /opt/www/webserver/nginx/html/videos; 
      index index.html index.htm; 
      access_log logs/stg.cdn.showsys.access.log; 
      error_log logs/videos_error.log; 
     } 
    } 

server { 
     listen  443 ssl; 
     server_name stg.showdb.vod.example.com stg.showdb.vod; 
     ssl_certificate  /etc/pki/tls/certs/aoaapls00109la.stg-example.com.crt; 
     ssl_certificate_key /etc/pki/tls/private/aoaapls00109la.stg-example.com.key; 
     ssl_protocols  TLSv1 TLSv1.1 TLSv1.2; 
     ssl_ciphers   HIGH:!aNULL:!MD5; 

     location/{ 
      add_header Access-Control-Allow-Origin "*"; 
      root /opt/www/webserver/nginx/html; 
      index index.html index.htm; 
      access_log logs/stg.showdb.vod.access.log; 
      error_log logs/stg.showdb.vod.error.log; 
     } 

     location /videos/ { 
      root /opt/www/webserver/nginx/html/videos; 
      index index.html index.htm; 
      error_log logs/videos_error.log; 
     } 
    } 

server { 
     listen  443 ssl; 
     server_name stg.cdn.showsys.example.com stg.cdn.showsystem.example.com; 
     ssl_certificate  /etc/pki/tls/certs/aoaapls00109la.stg-example.com.crt; 
     ssl_certificate_key /etc/pki/tls/private/aoaapls00109la.stg-example.com.key; 
     ssl_protocols  TLSv1 TLSv1.1 TLSv1.2; 
     ssl_ciphers   HIGH:!aNULL:!MD5; 
     add_header Access-Control-Allow-Origin "*"; 

      location/{ 
      root /opt/www/webserver/nginx/html/videos; 
      index index.html index.htm; 
      access_log logs/stg.cdn.showsys.access.log; 
      error_log logs/videos_error.log; 
     } 
    } 

这是非常令人费解!我究竟做错了什么?我该如何解决这个问题?

回答

1

如果您想要正则表达式匹配,请不要忘记您的代字号(或不区分大小写的RegEx的~*)。正则表达式匹配王牌非正则表达式匹配

location ~ ^/videos/ { 
    ... 
} 

删除波浪线,如果你不打算一个正则表达式匹配

location /videos/ { 
    ... 
}