nginx 与 php5-fpm 以及子目录中的多个 Wordpress

nginx 与 php5-fpm 以及子目录中的多个 Wordpress

我在 debian wheezy 上有一个运行着 php5-fpm 的 nginx 服务器。我希望/var/www/devel/我的开发文件夹位于http://devel.example.com。在这个目录中,我有多个项目,例如/proj-1/ /proj-2/ /proj-2/etc. - 其中一些需要使用 Wordpress。

现在,我意识到每个包含 Wordpress 的文件夹都必须添加一个单独的位置(如##SPE-LOC##以下配置中标记)启用重写,又称漂亮的永久链接。

配置有效,但令我烦恼的是,我必须为所有包含 Wordpress 的文件夹添加单独的位置。我怎样才能避免这些重复的阻碍?

我的 nginx 配置:

server {
    listen 80;
    server_name devel.example.com;

    root /var/www/devel;
    index index.html index.php;

    # Default location
    location / {
        #try_files $uri $uri/ =404;
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    ##SPEC-LOC##
    location /proj-1 {
        try_files $uri $uri/ /proj-1/index.php?q=$uri&$args;
    }

    ##SPEC-LOC##
    location /proj-3/blog {
        try_files $uri $uri/ /proj-3/blog/index.php?q=$uri&$args;
    }

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

    # deny access to .htaccess files
    location ~ /\.ht {
            deny all;
    }
}

答案1

不可以,抱歉。

但是如果您想要的是增加可扩展性,即能够在不编辑 nginx 配置的情况下添加新项目,那么您可以实施稍微不同的方法。

在与 nginx 配置相同的目录中创建一个文件夹。为了便于举例,我将使用以下名称项目配置。我的 nginx.conf 位于,/usr/local/etc/nginx/nginx.conf因此我只需创建/usr/local/etc/nginx/project_configs

您不需要重复位置块,只需将其添加include project_configs/*.conf到 nginx 配置中,然后为每个项目创建一个新文件project_configs并在其中写入位置块。

你的 nginx 配置应该如下所示:

server {
    listen 80;
    server_name devel.example.com;

    root /var/www/devel;
    index index.html index.php;

    # Default location
    location / {
        #try_files $uri $uri/ =404;
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    #Include all of the project configs.
    include project_configs/*.conf;

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

    # deny access to .htaccess files
    location ~ /\.ht {
            deny all;
    }
}

你可以添加任意数量的配置项目配置。它们应该看起来像这样:

项目-1.conf

location /proj-1 {
    try_files $uri $uri/ /proj-1/index.php?q=$uri&$args;
}

项目-3.conf

location /proj-3/blog {
    try_files $uri $uri/ /proj-3/blog/index.php?q=$uri&$args;
}

这样,您可以添加任意数量的项目,而无需修改 nginx 配置,也不会有混乱的配置。

希望有所帮助。

答案2

这可能不是最干净或最明智的解决方案,但我希望根据您列出的用例,以下方法能够起作用......

# Default location
location / {
    try_files $uri $uri/ $uri/index.php?q=$uri&$args;
}

根据您的实施,您可能需要额外的

/index.php?q=$uri&$args

缺点是它可能会破坏任何不使用 Wordpress 的查询字符串来制作漂亮的 URl 的项目。

相关内容