傀儡服务插件nginx抛出404s

我迁移了我的木偶大师安装程序,从nginx提供的文件中运行。

模块文件服务很好,但插件文件似乎不工作。 这些日志认为代理正在请求url /production/file_content/plugins/puppet/provider/exec/powershell.rb ,因此nginx会抛出一个404,因为不存在这样的path。 这在WEBrick上正常工作。

从理论上讲,这应该是写一个类似于下面的模块规则的重写规则的简单情况。 但是,很多这些提供程序都在模块中,因此,此特定提供程序位于/etc/puppet/modules/powershell/lib/puppet/provider/exec/powershell.rb

如何从请求URL映射到实际的插件,当它们可以分散在各种模块目录?

我的nginxconfiguration如下所示:

 upstream puppetmaster-thin { server unix:/var/run/puppet/puppetmasterd.0.sock; server unix:/var/run/puppet/puppetmasterd.1.sock; server unix:/var/run/puppet/puppetmasterd.2.sock; } server { listen 8140; root /etc/puppet/rack; ssl on; ssl_session_timeout 5m; ssl_certificate /var/lib/puppet/ssl/certs/gcspuppet01.pem; ssl_certificate_key /var/lib/puppet/ssl/private_keys/gcspuppet01.pem; ssl_client_certificate /var/lib/puppet/ssl/ca/ca_crt.pem; ssl_crl /var/lib/puppet/ssl/ca/ca_crl.pem; ssl_verify_client optional; ssl_ciphers SSLv2:-LOW:-EXPORT:RC4+RSA; proxy_read_timeout 120; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Client-Verify $ssl_client_verify; proxy_set_header X-Client_DN $ssl_client_s_dn; proxy_set_header X-SSL-Subject $ssl_client_s_dn; proxy_set_header X-SSL-Issuer $ssl_client_i_dn; location /production/file_content/ { location /production/file_content/extra_files/ { alias /etc/puppet/files/; } rewrite ^/production/file_content/modules/([^/]+)/(.*) /$1/files/$2; break; root /etc/puppet/modules/; } location / { proxy_pass http://puppetmaster-thin; } } 

我想到了。 问题在于nginx正在有效地向/production/file_content/提供静态任何请求。 这样做的问题是,虽然这对于从/production/file_content/modules/下的模块提供文件很有用,但它劫持/production/file_content/plugins

由于插件path是“魔术”,因此它们需要由puppet master守护进程来处理,而不是由nginx来处理。 解决的办法是写一个更好的nginxconfiguration文件:

 location /production/file_content/extra_files/ { alias /etc/puppet/files/; } location /production/file_content/modules/ { rewrite ^/production/file_content/modules/([^/]+)/(.*) /$1/files/$2; break; root /etc/puppet/modules/; }