Nginx别名父目录奇怪地重定向和auth不覆盖网站

时间:2012-05-19 19:28:29

标签: nginx

我对Nginx有两个问题我希望有人可以帮助我。

我在我的网站中设置了一个名为/ wordpress /的别名目录,并使其指向我的webroot之外的文件,现在一切正常,花花公子直到我尝试浏览父目录:/ wordpress。它似乎想重定向到* .x.co.uk(其中x代表我的域名)。配置跟随。

我的另一个问题是我的Auth并没有涵盖超过根目录/尽管在/ caluse中捕获任何不是/ wordpress /这会让我再次困惑的东西。所以如果我去/我必须认证/但是如果我去/视频我可以进入我的网站而没有认证。

我对Nginx有点新鲜,所以在阅读Wiki时我感到很困惑,这是多么愚蠢。

有人有什么想法吗?这是我的观看乐趣配置:

server {
        listen          80;
        server_name     _;
       root            /server_ws/the_stage/htdocs;
        access_log      /var/log/nginx/access.log;
        error_log       /var/log/nginx/error.log;

        error_page 404 /error/notfound;

        location /wordpress/ {
                alias /server_ws/wordpress/;
#               try_files $uri $uri/;
        }

   location ~* ^/wordpress/(.+).(jpg|jpeg|gif|css|png|js|ico|xml)$ {
           alias            /server_ws/wordpress/$1.$2;
           access_log      off;
           expires         30d;
   }

        location / {
                auth_basic "Restricted";
                auth_basic_user_file /etc/apache2/passwords;

                index   index.php;

                if ($host = 'x.co.uk') {
                        rewrite ^/(.*)$ http://www.x.co.uk/$1 permanent;
                }

                if (-f $request_filename) {
                        break;
                }

                if (!-e $request_filename) {
                        rewrite . /index.php last;
                }

                try_files $uri $uri/ /index.php;
        }

    location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
            root            /server_ws/the_stage/htdocs;
            access_log      off;
            expires         30d;
    }

}

以下是auth的一些日志条目。你可以在这一个中看到一个机器人试图访问我的robots.txt并因auth而失败:

2012/05/20 11:54:10 [error] 12059#0: *2008 no user/password was provided for basic authentication, client: 108.162.215.232, server: _, request: "GET /robots.txt HTTP/1.0", host: "www.x.co.uk"

但是我在我的网站上转到/ video并没有出现任何错误,但我得到了一个访问日志:

xxx.xxx.xxx.xxx - - [20/May/2012:12:51:35 +0000] "GET /video?cat=gaming&sort=upload_date HTTP/1.1" 301 185 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

这是/ wordpress访问的最新日志:

xxx.xxx.xx.xxx - - [20/May/2012:13:01:08 +0000] "GET /wordpress HTTP/1.1" 301 185 "-" "Opera/9.80 (Windows NT 6.1; WOW64; U; Edition Campaign 21; en) Presto/2.10.229 Version/11.64"

1 个答案:

答案 0 :(得分:0)

第一个问题解决方案是将location /wordpress/块更改为:

location /wordpress {
    alias /server_ws/wordpress/;
    try_files $uri $uri/ /index.php?$args;
}

请修改www重写,而不是if(which is evil)添加此块:

server {
    server_name x.co.uk;
    return 301 $scheme://www.x.co.uk$request_uri;
}

顺便说一句,从第一个服务器块中删除listen 80,它是implemented by default

UPD:rewrite return