Docker下搭建PHP环境(alpine版)及7层网络下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站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |