NGINX:主要位置块覆盖子目录位置?

时间:2016-04-24 16:38:13

标签: nginx uwsgi nginx-location

我已经阅读了适量的位置块文档,但我对RegEx没有多少经验,所以我对如何完成我想要做的事情感到有点迷茫。以下nginx配置可能会解释我想要做的比我能说的更好:

server {
        server_name example.com www.example.com;
        root /var/www/;
        index index.php;


        location /blog/ {
                try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
                try_files $uri =404;
                include fastcgi_params;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
        }

        location / {
                try_files $uri @uwsgi;
        }

        location @uwsgi {
                include uwsgi_params;
                uwsgi_pass unix:/tmp/uwsgi.sock;
        }


}

example.com/由一个瓶子应用程序通过uwsgi提供服务,所以这个位置下的所有东西都应该被路由到瓶子应用程序并在那里处理。这可以正常工作,但是我对如何向位置规则添加“例外”感到迷失,因此example.com/blog及其下的所有内容../sub1/sub2等都不会定向到瓶子应用,但实际上是由wordpress及其PHP魔法处理的。

这似乎应该是非常简单的设置,但它证明很难谷歌这些问题的简单解决方案,因为每个人似乎膨胀他们的'教程'配置大量的非必需品混淆了初学者

1 个答案:

答案 0 :(得分:2)

这可能需要一些调整,但您应该使用嵌套的位置块:

server {
    server_name example.com www.example.com;
    root /var/www;
    index index.php;

    location /blog/ {
        try_files $uri $uri/ /blog/index.php?$args;

        location ~ \.php$ {
            try_files $uri =404;
            include fastcgi_params;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
        }
    }

    location / {
        try_files $uri @uwsgi;
    }

    location @uwsgi {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/uwsgi.sock;
    }
}

请注意,默认URI更改为/blog/index.php,希望所有WordPress文件都位于此位置。