できません。Nginxは構成ファイル内の変数を実際にはサポートしておらず、その開発者はこの機能の追加を要求するすべての人を嘲笑しています。
「[変数]は、単純な静的構成に比べてかなりコストがかかります。[A]マクロ展開と「include」ディレクティブは、sed+makeやその他の一般的なテンプレートメカニズムなどで使用する必要があります。」http://nginx.org/en/docs/faq/variables_in_config.html
プレースホルダー構成ファイルから構成ファイルを生成できる小さなツールを作成またはダウンロードする必要があります。
更新以下のコードは引き続き機能しますが、すべてをPackagist上のConfiguratorと呼ばれる小さなPHPプログラム/ライブラリにまとめました。これにより、テンプレートやさまざまな形式の構成データからnginx/php-fpmなどの構成ファイルを簡単に生成できます。 。
たとえば、私のnginxソース設定ファイルは次のようになります。
location / {
try_files $uri /routing.php?$args;
fastcgi_pass unix:%phpfpm.socket%/php-fpm-www.sock;
include %mysite.root.directory%/conf/fastcgi.conf;
}
そして、変数が定義された構成ファイルがあります。
phpfpm.socket=/var/run/php-fpm.socket
mysite.root.directory=/home/mysite
そして、それを使用して実際の構成ファイルを生成します。あなたはPythonの人のように見えるので、PHPベースの例は役に立たないかもしれませんが、PHPを使用している他の人にとっては次のようになります。
<?php
require_once('path.php');
$filesToGenerate = array(
'conf/nginx.conf' => 'autogen/nginx.conf',
'conf/mysite.nginx.conf' => 'autogen/mysite.nginx.conf',
'conf/mysite.php-fpm.conf' => 'autogen/mysite.php-fpm.conf',
'conf/my.cnf' => 'autogen/my.cnf',
);
$environment = 'amazonec2';
if ($argc >= 2){
$environmentRequired = $argv[1];
$allowedVars = array(
'amazonec2',
'macports',
);
if (in_array($environmentRequired, $allowedVars) == true){
$environment = $environmentRequired;
}
}
else{
echo "Defaulting to [".$environment."] environment";
}
$config = getConfigForEnvironment($environment);
foreach($filesToGenerate as $inputFilename => $outputFilename){
generateConfigFile(PATH_TO_ROOT.$inputFilename, PATH_TO_ROOT.$outputFilename, $config);
}
function getConfigForEnvironment($environment){
$config = parse_ini_file(PATH_TO_ROOT."conf/deployConfig.ini", TRUE);
$configWithMarkers = array();
foreach($config[$environment] as $key => $value){
$configWithMarkers['%'.$key.'%'] = $value;
}
return $configWithMarkers;
}
function generateConfigFile($inputFilename, $outputFilename, $config){
$lines = file($inputFilename);
if($lines === FALSE){
echo "Failed to read [".$inputFilename."] for reading.";
exit(-1);
}
$fileHandle = fopen($outputFilename, "w");
if($fileHandle === FALSE){
echo "Failed to read [".$outputFilename."] for writing.";
exit(-1);
}
$search = array_keys($config);
$replace = array_values($config);
foreach($lines as $line){
$line = str_replace($search, $replace, $line);
fwrite($fileHandle, $line);
}
fclose($fileHandle);
}
?>
そして、deployConfig.iniは次のようになります。
[global]
;global variables go here.
[amazonec2]
nginx.log.directory = /var/log/nginx
nginx.root.directory = /usr/share/nginx
nginx.conf.directory = /etc/nginx
nginx.run.directory = /var/run
nginx.user = nginx
[macports]
nginx.log.directory = /opt/local/var/log/nginx
nginx.root.directory = /opt/local/share/nginx
nginx.conf.directory = /opt/local/etc/nginx
nginx.run.directory = /opt/local/var/run
nginx.user = _www