使用Puppet Nginx jfryman模块将if else放入nginx Vhost配置中

时间:2014-04-21 17:34:35

标签: if-statement nginx rewrite puppet conditional-statements

我想为具有if条件语句的网站自动化nginx vhost配置。我试图用jfryman-nginx木偶伪造模块来做这件事,但我无法配置文件。我想要的配置如下:

 server {
  listen   8080;

  server_name abcqwe.com;

  root /data/vvv/abcqwe.com;
  index index.php index.html index.htm;

  access_log /data/vvv/abcqwe.com/logs/access.log;
  error_log  /data/vvv/abcqwe.com/logs/error.log;

  location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to index.html
    #try_files $uri $uri/ /index.html;

    if (!-f $request_filename){
      set $rule_0 1$rule_0;
    }

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

那么我如何在我的vhost配置中放入这个if条件:

 if (!-f $request_filename){
       set $rule_4 1$rule_4;
     }

虽然可以这样做吗?我试过location_cfg_prepend,但没有帮助..

3 个答案:

答案 0 :(得分:3)

我和jfryman-nginx的v0.0.9有同样的问题。

In the latest source templates on github,如果您使用;,则似乎不应添加location_custom_cfg_{pre,ap}pend

in v0.0.9, the latest bundled puppet forge release,即使该行只有;导致}失败,模板也会添加nginx

解决方案:

  1. 使用location_**custom**_cfg_{pre,ap}pend选项

  2. A或B:

    一个。编辑模板中的;

    B中。从github中提取最新版本的源代码:

  3. sudo rm -rf / etc / puppet / modules / nginx&& cd / etc / puppet / modules&& sudo git clone https://github.com/jfryman/puppet-nginx nginx

    实施例

      nginx::resource::location { 'sub.dom.com_root':
        ensure                                                                       => present,
        vhost                                                                        => 'sub.dom.com',
        location                                                                     => '~ \.php$',
        fastcgi                                                                      => 'unix:/var/run/php5-fpm.sock',                                                                                                                                                              
        www_root                                                                     => '/var/www/sub.dom.com',
        location_custom_cfg_append                                                   => {
          'if (-f $request_filename)'                                                => '{ break; }',
          'if (-d $request_filename)'                                              => '{ break; }',
          'if ($request_filename !~ (js|css|jpg|png|gif|robots\.txt|index\.php.*) )' => '{ rewrite ^/(.*) /index.php?$1 last; }',
        },
      }
    

答案 1 :(得分:0)

请尝试在nginx中使用LuaModuleLua具有大量配置的模块。

使用Lua语法

非常简单易用。

请阅读this

答案 2 :(得分:0)

现在,您可以使用 from requests.auth import HTTPBasicAuth requests.post(url, auth=HTTPBasicAuth(username, password)) raw_prepend参数。

有关详细信息,请参阅location.pp页面。