0

この指示に従って、Debian Wheezy 用のVagrant VirtualBox ボックスをセットアップしました。

この仮想マシンに nginx と php5-fpm をインストールしました。127.0.0.1:8080ホストからゲストマシンにアクセスできます。また、php ファイルを提供することもでき、phpinfo()正しく動作します。

しかし、php ファイルからリモートの MySQL サーバーにアクセスしようとすると、リクエストが常にタイムアウトし、504 Gateway Timeoutエラーが発生します。

以下の点に気付きました。

  • 私のnginx confファイルには、この行がありfastcgi_pass unix:/var/run/php5-fpm.sock;ます。
  • /etc/php5/fpm/pool.d/www.conf、私は持っていlisten = /var/run/php5-fpm.sockます。
  • php5-fpm.sockに存在し/var/run/ます。
  • 127.0.0.1:9000ソケットの代わりに使用しても504 Gateway Timeoutエラーが発生しますが、待機せずにすぐにエラーが発生します。
  • nginx confに追加proxy_read_timeout 300;しましたが、これで問題は解決しませんでした。

私のVagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  # Every Vagrant virtual environment requires a box to build off of.
  config.vm.box = "wheezy32"

  config.vm.provision :shell, :path => "dev/bootstrap.sh"

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  config.vm.network :forwarded_port, guest: 80, host: 8080

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  # config.vm.network :private_network, ip: "192.168.33.10"

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  # config.vm.network :public_network
end

私のnginx conf

server {
    root /var/www/sites/mysite/public_html;
    index index.html index.htm index.php;

    # Make site accessible from http://localhost/
    server_name localhost;

    access_log /var/www/logs/mysite/mysite.access_log;
    error_log /var/www/logs/mysite/mysite.error_log;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ /index.html;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules

            proxy_read_timeout 300;
    }

    location /doc/ {
        alias /usr/share/doc/;
        autoindex on;
        allow 127.0.0.1;
        allow ::1;
        deny all;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

        # With php5-cgi alone:
    #   fastcgi_pass 127.0.0.1:9000;
        # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

/var/www/logs/mysite/mysite.error_log

2013/06/16 23:47:27 [error] 2567#0: *23 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 10.0.2.2, server: localhost, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock", host: "127.0.0.1:8080"
2013/06/16 23:47:27 [error] 2567#0: *23 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 10.0.2.2, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "127.0.0.1:8080"

リモート MySQL サーバーに接続する方法を次に示します。

require_once('/var/www/sites/mysite/includes/db_constants.php');

try {
        $dsn = 'mysql:host=172.16.0.51;dbname=' . DB_NAME . ';charset=utf8';

        $db = new PDO($dsn,DB_USER,DB_PASS);

        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    } catch (PDOException $e) {
        header('HTTP/1.1 500');
        exit;
    } catch (Exception $e) {
        header('HTTP/1.1 500');
        exit;
    }

私は何が欠けていますか?

4

1 に答える 1

0

@cmur2 が言ったように、私はプライベート IP を使用して削除サーバーに接続していたため、機能しませんでした。パブリック IP に変更したところ、正しく機能するようになりました。

于 2013-06-17T08:18:43.227 に答える