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

NGINX:主位置块覆盖子目录位置?,nginx,uwsgi,nginx-location,Nginx,Uwsgi,Nginx Location,我已经阅读了大量关于位置块的文档,但我对正则表达式并没有太多的经验,所以我对如何完成我正在尝试做的事情有点迷茫。下面的nginx配置可能会解释我想做得比文字更好的事情: server { server_name example.com www.example.com; root /var/www/; index index.php; location /blog/ { try_files $uri

我已经阅读了大量关于位置块的文档,但我对正则表达式并没有太多的经验,所以我对如何完成我正在尝试做的事情有点迷茫。下面的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魔法处理


这似乎应该很容易设置,但事实证明,用谷歌搜索这些问题的简单解决方案非常困难,因为每个人似乎都在用大量的非基本配置来充实他们的“教程”配置,这让初学者感到困惑。

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

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文件都位于此位置。

这很好,帮助解决了我的问题,尽管我发现另一个问题是WordPress安装配置错误。我已经将wordpress文件移到了一个子目录,但显然我也需要重新安装它。但是,如果没有此修复,它将无法正常工作。