使用专用php fpm服务器实现Nginx负载平衡

使用专用php fpm服务器实现Nginx负载平衡,php,nginx,Php,Nginx,我用nginx+phpfpm和mysql安装了服务器。 我有另一个只安装了php fpm的服务器,所以希望用作负载平衡。 但当我使用这个带有php fpm的dedacted服务器作为负载平衡器时,我在打开页面时出错:“拒绝访问” /etc/nginx/nginx.conf user www-data; worker_processes 3; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events

我用nginx+phpfpm和mysql安装了服务器。 我有另一个只安装了php fpm的服务器,所以希望用作负载平衡。 但当我使用这个带有php fpm的dedacted服务器作为负载平衡器时,我在打开页面时出错:“拒绝访问”

/etc/nginx/nginx.conf

user www-data;
worker_processes  3;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    server_names_hash_bucket_size 64;
    access_log  /var/log/nginx/access.log;

    sendfile        on;
    #tcp_nopush      on;

    keepalive_timeout   65;
    tcp_nodelay         on;

    #gzip                on;

    upstream php {
        server dedicatedserverip:9000;
    }

    include /etc/nginx/sites-enabled/*;
}
server {
    listen   81;
    server_name site.org www.site.org;
    access_log  /var/log/nginx/site.org.log;
    error_log   /var/log/nginx/site.org.log;
    root        /home/www/site.org;
    index       index.php; 

    location ~ .php$ {
        fastcgi_pass  php;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /home/www/$fastcgi_script_name;
    }
} 
/etc/nginx/sites enabled/site.org.conf

user www-data;
worker_processes  3;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    server_names_hash_bucket_size 64;
    access_log  /var/log/nginx/access.log;

    sendfile        on;
    #tcp_nopush      on;

    keepalive_timeout   65;
    tcp_nodelay         on;

    #gzip                on;

    upstream php {
        server dedicatedserverip:9000;
    }

    include /etc/nginx/sites-enabled/*;
}
server {
    listen   81;
    server_name site.org www.site.org;
    access_log  /var/log/nginx/site.org.log;
    error_log   /var/log/nginx/site.org.log;
    root        /home/www/site.org;
    index       index.php; 

    location ~ .php$ {
        fastcgi_pass  php;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /home/www/$fastcgi_script_name;
    }
} 

为什么我会犯这个错误?当我仅将fastcgi_pass更改为127.0.0.1:9000时,一切正常。

您收到了该错误,因为PHP-FPM服务器上不存在文件PHP-FPM

fastcgi_参数SCRIPT_FILENAME/home/www/$fastcgi_SCRIPT_name

或者(我使用它是因为它对于多个vhost更简单)

fastcgi\u参数SCRIPT\u文件名$document\u root$fastcgi\u SCRIPT\u名称

Nginx似乎只是向PHP-FPM服务器提供了文件的位置,然后PHP-FPM服务器将其呈现出来。最简单的解决方案是将文档根重新同步到PHP-FPM服务器

这篇文章可以解释细节:

如果它是一个空白页面,上面有“拒绝访问”,那么它是由添加到php fpm中的内容引起的

如果php fpm配置中没有该文件,则默认为.php,并防止php解释器解析所有其他文件类型,从而在尝试执行此操作时生成“拒绝访问”