加碼上一篇「Apache 2.4 透過 X-Forwarded-For 阻擋特定 location」的設定,一樣要讓他用 Puppet 來管理,
要寫 Apache 建議大家直接可以用 Github 的「puppetlabs/apache」來寫就好,這邊會直接拿 X-Forwarded-For 來做示範
範例:
範例使用 puppetlabs/apache 的 2.3.0 版本,如果要實現 configuration 像這樣的話:
<VirtualHost *:80> ... DocumentRoot "/var/www/htdocs" <Directory "/var/www/htdocs"> Options -Indexes +ExecCGI AllowOverride All Require all granted </Directory> <Location "/login"> Require env internal </Location> SetEnvIf X-Forwarded-For "^10\.\d{1,3}\.\d{1,3}\.\d{1,3}$" internal </VirtualHost>
- 以 class 的寫法:
class { 'apache': } apache::vhost { 'example.com': port => 80, docroot => '/var/www/htdocs', docroot_owner => 'www-data', docroot_group => 'www-data', setenvif => ['X-Forwarded-For "^10\.\d{1,3}\.\d{1,3}\.\d{1,3}$" internal'], directories => [ { 'path' => '/var/www/htdocs', 'provider' => 'directory', 'options' => '-Indexes +ExecCGI', 'require' => 'all granted', }, { 'path' => 'login', 'provider' => 'location', 'require' => 'env internal', }, ], }
- 把 vhost 拉到 hiera 的寫法:
vhosts: "%{trusted.certname}": port: 80 docroot: '/var/www/htdocs' docroot_owner: 'www-data' docroot_group: 'www-data' setenvif: - 'X-Forwarded-For "^10\.\d{1,3}\.\d{1,3}\.\d{1,3}$" internal' directories: - path: '/var/www/htdocs' provider: 'directory' options: '-Indexes +ExecCGI' allow_override: 'All' require: 'all granted' - path: '/login' provider: 'location' require: 'env internal'
提供兩種簡單的寫法,實際可以有更多的變化,以我目前遇到的需求來說,Github 出的 module 算是有品質的。