加入收藏 | 设为首页 | 会员中心 | 我要投稿 92站长网 (https://www.92zz.com.cn/)- 语音技术、视频终端、数据开发、人脸识别、智能机器人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Docker下搭建PHP环境(alpine版)及7层网络下PHP负载均衡

发布时间:2023-05-23 20:31:48 所属栏目:PHP教程 来源:未知
导读: 上次我们利用docker搭建了nginx:alpine版,作为互联网超普遍的LNMP来说,搭建一个PHP容器也很不错。今天就来搭建一个适配nginx的PHP容器。
nginx需要用哪个版本的PHP?
nginx需要用php-fpm

上次我们利用docker搭建了nginx:alpine版,作为互联网超普遍的LNMP来说,搭建一个PHP容器也很不错。今天就来搭建一个适配nginx的PHP容器。

nginx需要用哪个版本的PHP?

nginx需要用php-fpm版本,所以在选择PHP的tag时,就要选带有fpm字样的。由于我喜欢用alpine作为容器的操作环境,所以肯定还要带有alpine字样啦。具体的tag可以在hub.docker.com中搜索PHP,然后进入官方镜像后,查看里面的tag,巨多。

下面以PHP7.1作为案例。

Docker搭建PHP容器步骤:

1、创建目录,用来保存PHP的配置文件

mkdir -p /data/php/php71

2、创建PHP容器

docker run -d --name php71 -v /data/php/php71/etc:/usr/local/etc -v /data/website:/website --restart=always --network=br0 php:7.1-fpm-alpine

# -d 表示后台运行

# --name php71 是给容器起的名字

# -v xxx:zzz 是挂载目录,这里第一个目录是放php配置的,第二个是网站目录

# --restart=always 容器停止了要重启吗?要!

# --network=br0 将PHP容器加入到br0网络中,这样就可以与前面的nginx容器进行通信了

# php:7.1-fpm-alpine 这是我选用的php版本

# 这里因为php和nginx都在br0网络里,所以这里无需做本机到容器的端口映射

3、在nginx中配置

vi /data/nginx/conf.d/01.conf

按一下i,然后输入:

server {

listen 80; # 监听80端口,也可以监听你自己想要监听的任意端口

server_name ; # 这里填你解析到服务器的域名

root /website/web; # xxx这个网站的根目录

index index.php index.html index.htm; #网址以/结尾时,默认访问的文件名

location /{

try_files $uri $uri/ /index.php?$query_string;

#网址URI以类似/aaa或者/aaa/结尾时,默认就访问/index.php文件并把参数也传过去

}

location ~ \.php {

fastcgi_pass php71:9000;

# php71是容器名,9000是PHP默认监听的端口,这步很重要。

# 其实php71这个名称会自动对应到这个容器的ip地址,但容器的ip地址多数时候是变化的,所以用容器名就不怕ip变来变去的啦

fastcgi_index index.php;

# 访问PHP(/aaa和/aaa/类型URI)时默认的访问文件

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

# 我们自己定义了一个变量SCRIPT_FILENAME,内容为文件的路径和名称,形如:/website/web/a/xxx.php 这样,通常大家都会定义这个呢。之所以自定义,还不是因为nginx默认的定义变量中没有嘛

include fastchi_params;

# 还有很多nginx默认定义好的变量,也给传过去。只有这样,PHP通过$_SERVER的时候才能获取这些变量,才好做进一步的判断呢

}

}

4、去建一个最简单的网页

vi /data/website/web/index.php

然后按一下i,写入:

然后按一下esc键,输入:wq就保存好了。

5、重启nginx容器

docker restart nginx

#也可以docker exec -it nginx nginx -s reload 这个意思是进入nginx容器并重新加载配置

6、访问网页

你的域名 看看能否看到很多内容,里面都是PHP的各种信息呢。

玩个花活,同一网站使用多个不同版本的PHP

上面我们创建了PHP7.1的容器,那我们再创建个老版本吧,PHP5.6

1、创建保存PHP配置的目录

mkdir /data/php/php56

2、创建PHP5.6容器

docker run -d --name php56 -v /data/php/php56/etc:/usr/local/etc -v /data/website:/website --restart=always --network=br0 php:5.6-fpm-alpine

3、在上面的01.conf中增加配置

location ~ ^/5/.+\.php {

fastcgi_pass php56:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param OOO hahaha; # 自己随便乱定义了一个变量OOO,内容为hahaha

include fastcgi_params;

}

这样就实现了访问这种网址就使用PHP5.6,其他的就使用PHP7.1了。

当然,如果一个服务器上有多个网站,或者多个子域名,也可以将不同的域名指向不同版本的PHP。多个网站,就写多个server{}。

7层网络下的PHP负载均衡

通过nginx的upstream将同一个网站的PHP请求分散到多个不同的PHP容器中php环境,这就是PHP的负载均衡了。好处是,如果某个PHP容器挂掉了,还有别的PHP容器可以继续提供服务,给一个案例配置吧:

(编辑:92站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章