我有一个 Apache(2.4) Web 服务器和一个 php (7.1) 服务器,它们运行在 Ubuntu 16.04 LTS 上。我尝试设置一个 puppet 清单以在 apache 服务器上创建一个 vhost,然后每次 Web 服务器收到 php 服务器请求时,apache 服务器都会将请求代理到 php 服务器,然后从文档根目录读取请求的页面以显示请求页面。文档根目录由 Web 服务器和 php 服务器共享。php 服务器上已设置一个 php fpm 池,用于在端口 9001 上监听来自 apache 服务器的代理请求。当我运行“puppet agent -t”时,我没有收到任何错误,并且 vhost 创建成功。创建 vhost 后,我使用此代码创建一个名为 info.php 的 php 文件,但出于某种原因,当我打开浏览器并在 url 中键入 vhost 名称(example.com/info.php)时,页面中什么都没有显示。我做错了什么?下面是我正在使用的 puppet 清单。
class team::vhost {
#Create the base web directory and the vhosts for the wesbite
file { ['/var/wwws', '/var/wwws/web']:
ensure => 'directory',
}
#Create non-ssl vhost
apache::vhost { 'example.com non-ssl':
#ensure => 'absent',
servername => 'example.com',
serveradmin => '[email protected]',
serveraliases => [
'www.example.com',
],
docroot => '/var/wwws/web',
port => '80',
rewrites => [
{
comment => 'Rewrite all non-ssl requests to ssl',
rewrite_cond => ['%{HTTPS} off'],
rewrite_rule => ['/(.*) https://%{SERVER_NAME}/$1 [R,L]'],
}
],
require => [
File['/var/wwws/web'],
]
}
#Create ssl vhost
apache::vhost { 'example.com ssl':
#ensure => 'absent',
servername => 'example.com',
serveradmin => '[email protected]',
serveraliases => [
'www.example.com',
],
port => '443',
docroot => '/var/wwws/web',
ssl => true,
directories => [
{
path => '/var/wwws/web',
provider => 'directory',
rewrites => [
{
comment => 'Redirect non-file requests to our application',
rewrite_cond => [
'%{REQUEST_FILENAME} !-f',
'%{REQUEST_FILENAME} !-d',
],
rewrite_rule => ['^(.*)$ /info.php [QSA,L]'],
}
],
directoryindex => 'info.php',
options => ['-MultiViews', '+Indexes', '+FollowSymLinks'],
},
{
'path' => '\.php$',
'provider' => 'filesmatch',
'sethandler' => 'proxy:fcgi://192.168.2.4:9001'
}
],
require => [
File['/var/wwws/web']
]
}
}
答案1
我弄清楚了问题的原因。iptables 中有一条防火墙规则阻止了所有流量,包括 http(端口 80)和 https(端口 443)。我不得不刷新我的 iptables。我能够通过使用“iptables -F”刷新我的 iptables 来确定这一点。一旦我确定它正在工作,我重新应用所有 iptables 防火墙规则并添加另一条规则以仅允许 http 和 http 流量进入服务器。现在一切都正常了。