zoukankan      html  css  js  c++  java
  • 安装php7.2并且整合nginx且分开部署

    1.安装php 7.2

    2.php配置

    3.nginx配置

    4.测试

    5.报错与解决

    6.利用upstream实现负载均衡

    1.安装php 7.2

    启动容器:

    1 liwangdeMacBook-Air:~ liwang$ docker run -i -t --name php --net mynetwork --ip 172.18.0.5 -p 9000:9000 centos /bin/bash

    复制php至容器

    1 liwangdeMacBook-Air:~ liwang$ docker cp soft/php-7.2.5.tar.gz php:/soft

    安装插件

    1 [root@6aaa15f97607 php-7.2.5]# yum install gcc gcc-c++ make libxml2 libxml2-devel libpng libpng-devel -y

    编译php

    1 [root@6aaa15f97607 html]# ./configure --prefix=/usr/local/php --with-pdo-mysql --enable-mysqlnd --with-gd --enable-gd-jis-conv --enable-fpm --with-mysqli=mysqlnd
    2 [root@6aaa15f97607 html]# make && make install

    2.配置PHP

    1.复制php-fpm.conf

    1 [root@6aaa15f97607 php-7.2.5]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

    2.复制www.conf

    1 [root@6aaa15f97607 php-7.2.5]# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

    3.修改www.conf

    查看php容器ip地址

    1 liwangdeMacBook-Air:~ liwang$ docker inspect -f {{.NetworkSettings.Networks.mynetwork.IPAddress}} php
    2 172.18.0.5
    3 liwangdeMacBook-Air:~ liwang$ 

    修改www.con listen为容器ip,具体如下:

    1 [root@6aaa15f97607 php-fpm.d]# sed -n "34,38p" /usr/local/php/etc/php-fpm.d/www.conf
    2 ;   '/path/to/unix/socket' - to listen on a unix socket.
    3 ; Note: This value is mandatory.
    4 listen = 172.18.0.5:9000
    5 
    6 ; Set listen(2) backlog.
    7 [root@6aaa15f97607 php-fpm.d]# 

    4.启动php-fpm

    1 [root@6aaa15f97607 php-fpm.d]#/usr/local/php/sbin/php-fpm 
    2 [root@6aaa15f97607 php-fpm.d]#

    5.查看启动状态

     1 [root@6aaa15f97607 php-fpm.d]#netstat -tulnp
     2 Active Internet connections (only servers)
     3 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
     4 tcp        0      0 172.18.0.5:9000         0.0.0.0:*               LISTEN      13407/php-fpm: mast 
     5 tcp        0      0 127.0.0.11:37421        0.0.0.0:*               LISTEN      -                   
     6 udp        0      0 127.0.0.11:41037        0.0.0.0:*                           -                   
     7 [root@6aaa15f97607 php-fpm.d]# ps aux
     8 USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
     9 root         1  0.0  0.1  11784  2740 pts/0    Ss   11:56   0:00 /bin/bash
    10 root     13407  0.0  0.3  50052  6472 ?        Ss   14:14   0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
    11 nobody   13408  0.0  0.5  50116 10328 ?        S    14:14   0:00 php-fpm: pool www
    12 nobody   13409  0.0  0.5  50116 10328 ?        S    14:14   0:00 php-fpm: pool www
    13 root     13430  0.0  0.1  47496  3384 pts/0    R+   15:13   0:00 ps aux
    14 [root@6aaa15f97607 php-fpm.d]# 

    3.nginx配置

    1.nginx.conf配置如下:

    注意index中需要设置添加index.php,location php需要注意fastcgi_pass和fastcgi_param项

     1 [root@dbc19df20116 www]# sed -n "32,82p" /usr/local/nginx/conf/nginx.conf | egrep -v "#|^$"   
     2     keepalive_timeout  65;
     3     server {
     4         listen       80;
     5         server_name  localhost;
     6         location / {
     7             root   html;
     8             index  index.php index.html index.htm;
     9         }
    10         error_page   500 502 503 504  /50x.html;
    11         location = /50x.html {
    12             root   html;
    13         }
    14         location ~ \.php$ {
    15             root           html;
    16             fastcgi_pass   172.18.0.5:9000;
    17             fastcgi_index  index.php;
    18             fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
    19             include        fastcgi_params;
    20         }
    21     }
    22 [root@dbc19df20116 www]# 

    2.由于fastcgi_pass连接至不同的服务器,故php服务器需要设置index root

    1 [root@6aaa15f97607 php-fpm.d]# ls -l /usr/local/nginx/html/index.php 
    2 -rw-r--r-- 1 root root 21 May 14 14:24 /usr/local/nginx/html/index.php
    3 [root@6aaa15f97607 php-fpm.d]# 

    4.测试

    1 [root@dbc19df20116 www]# curl localhost
    2 Hello,This is PHP server site
    3 [root@dbc19df20116 www]# 

    5.报错与解决

    1 [root@dbc19df20116 www]# cat /usr/local/nginx/logs/error.log 
    2 2018/05/14 14:08:09 [notice] 25607#0: signal process started
    3 2018/05/14 14:08:09 [alert] 25611#0: sched_setaffinity() failed (22: Invalid argument)
    4 2018/05/14 14:15:37 [error] 25611#0: *32 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 172.18.0.1, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://172.18.0.5:9000", host: "localhost"
    5 [root@dbc19df20116 www]# 

    1.如果nginx与php服务器是分开部署的话,如错误日志所属,那么172.18.0.5这台服务器上需要有nginx的root文件,既index.php,添加后解决此问题。

    2.如果nginx与php是在同一服务器,且php是使用127.0.0.1进行连接的话,那么可以修改nginx.conf为:

    (fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;)

    6.利用upstream实现负载均衡

     环境:在服务器172.18.0.5上构建两台php,其端口分别为9000以及9001

    1 [root@6aaa15f97607 ~]# netstat -tulnp
    2 Active Internet connections (only servers)
    3 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    4 tcp        0      0 127.0.0.11:43655        0.0.0.0:*               LISTEN      -                   
    5 tcp        0      0 172.18.0.5:9000         0.0.0.0:*               LISTEN      46/php-fpm: master  
    6 tcp        0      0 172.18.0.5:9001         0.0.0.0:*               LISTEN      17/php-fpm: master  
    7 udp        0      0 127.0.0.11:50582        0.0.0.0:*                           -                   
    8 [root@6aaa15f97607 ~]# 

    在nginx本地构建一台php,其端口为9000

    1 [root@dbc19df20116 conf]# netstat -tulnp
    2 Active Internet connections (only servers)
    3 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    4 tcp        0      0 127.0.0.11:35111        0.0.0.0:*               LISTEN      -                   
    5 tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      42/php-fpm: master  
    6 tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      23/nginx: master pr 
    7 udp        0      0 127.0.0.11:57311        0.0.0.0:*                           -                   
    8 [root@dbc19df20116 conf]# 

    修改nginx配置文件nginx.conf

    upstream作用域http标签内

    其后状态值含义如下:

    weight:值越大,负载则越重

    backup:当其他机器忙或则down时,数据才会请求backup机器,因此,此机器负载最轻

    down:表示该机器不参与负载

    例如,如下配置,将负载压在172.18.0.5上,127.0.0.1则作为备份机

    upstream siteidc{

        server 172.18.0.5:9000 weight=2;

        server 172.18.0.5:9001 weight=1;

        server 127.0.0.1:9000 backup;

    }

     

    location设置如下,将fastcgi_pass压为upstream的值即可。

    location ~ \.php$ {

        root           html;

        fastcgi_pass   siteidc;

        fastcgi_index  index.php;

        fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;

        include        fastcgi_params;

    }

    整体nginx.conf文件如下:

     1 [root@dbc19df20116 conf]# cat nginx.conf | grep -v "^$" | grep -v "#"
     2 worker_processes  4;
     3 worker_cpu_affinity 00000001 00000010 00000011 00000100;
     4 worker_rlimit_nofile 1048576;
     5 events {
     6     use epoll;
     7     worker_connections  65535;
     8 }
     9 http {
    10     upstream siteidc{
    11         server 172.18.0.5:9000 weight=2;
    12         server 172.18.0.5:9001 weight=1;
    13         server 127.0.0.1:9000 backup;
    14     }
    15     include       mime.types;
    16     default_type  application/octet-stream;
    17     sendfile        on;
    18     keepalive_timeout  65;
    19     server {
    20         listen       80        default backlog=1024;
    21         server_name  localhost;
    22         location / {
    23             root   html;
    24             index  index.php index.html index.htm;
    25         }
    26         error_page   500 502 503 504  /50x.html;
    27         location = /50x.html {
    28             root   html;
    29         }
    30         location ~ \.php$ {
    31             root           html;
    32             fastcgi_pass   siteidc;
    33             fastcgi_index  index.php;
    34             fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
    35             include        fastcgi_params;
    36         }
    37     }
    38     server {
    39     listen 80;
    40     server_name www.wang-li.top;
    41     
    42     location / {
    43         root html/www;
    44         index index.html index.php;
    45     }
    46     location ~ \.php$ {
    47         root html/www;
    48         fastcgi_pass 172.18.0.5:9001;
    49         fastcgi_index index.php;
    50         fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/www$fastcgi_script_name;
    51         include fastcgi_params;
    52     }
    53     }
    54 }
    55 [root@dbc19df20116 conf]# 
  • 相关阅读:
    学习git之路--1
    No input file specified. phpStudy nginx报错解决方案
    nginx隐藏tp路由index.php
    tp5命令行
    生成器
    php 解密小程序获取unionid
    根据GUID获取实例
    用SQL将数字转换为中文数字
    TFS无法确定工作区解决方案
    利用SQL语句产生分组序号
  • 原文地址:https://www.cnblogs.com/NoneID/p/9038744.html
Copyright © 2011-2022 走看看