Linux

Apache 伺服器代理 fcgi 到 php 伺服器

  • November 17, 2017

我有一個在 Ubuntu 16.04 LTS 上執行的 Apache(2.4) 網路伺服器和一個 php (7.1) 伺服器。我正在嘗試設置一個木偶清單以在 apache 伺服器上創建一個虛擬主機,然後每次 web 伺服器收到 php 伺服器請求時,apache 伺服器會將請求代理到 php 伺服器,然後從文件中讀取請求的頁面root 顯示請求頁面。文件根由 web 伺服器和 php 伺服器共享。已在 php 伺服器上設置了一個 php fpm 池,以偵聽埠 9001 上來自 apache 伺服器的代理請求。當我執行“puppet agent -t”時,我沒有收到任何錯誤,並且 vhost 已成功創建。創建虛擬主機後,我會使用此程式碼創建一個名為 info.php 的 php 文件,但由於某種原因,當我打開瀏覽器並在 url 中鍵入虛擬主機名稱時(example.com/info.php)。php) 頁面中沒有顯示任何內容。我做錯了什麼?下面是我正在使用的木偶清單。

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   => 'localhost@example.com',
     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   => 'localhost@example.com',
     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']
        ]
     }
  }

我弄清楚是什麼導致了這個問題。iptables 中有一條防火牆規則阻止所有流量,包括 http(埠 80)和 https(埠 443)。我不得不刷新我的 iptables。我能夠通過使用“iptables -F”刷新我的 iptables 來確定這一點。一旦我確定它工作正常,我就重新應用了所有 iptables 防火牆規則並添加了另一條規則以僅允許 http 和 http 流量到伺服器。現在一切正常。

引用自:https://serverfault.com/questions/866799