专栏首页腾讯云容器服务团队的专栏使用腾讯云容器服务来构建简单web service
原创

使用腾讯云容器服务来构建简单web service

使用腾讯云容器服务来构建简单 web service

本文将介绍使用nginx和php来构建简单web service,核心在于如何配置nginx的upstream,使得nginx能够与后端服务通信。我们的web service包含两个服务,分别是nginx和php-fpm,nginx服务收到用户请求后,根据配置,如果用户请求的是php文件,则将请求转给后端的php-fpm服务来处理。

为了方便,nginx容器和php-fpm容器使用同一个镜像,这个镜像右下面的仓库build而来。其中,app目录是我们的核心目录,用于存放php代码文件。etc目录用来存放配置,它包含了nginx服务的配置,以及php-fpm服务的配置。

一、配置说明

|-- Dockerfile
|-- app
|   |-- index.php
|   `-- info.php
`-- etc
    |-- nginx
    |   |-- nginx.conf
    |   `-- sites-enabled
    |       `-- myapp
    `-- php-fpm
        |-- php-fpm.conf
        `-- pool.d
            `-- www.conf

我们来看下nginx的核心配置文件 myapp:

server {
        root /app;

        location / {
                try_files $uri /index.php$is_args$args;
        }

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass php-fpm:9000;
                fastcgi_index index.php;
                include fastcgi_params;
    }
}

nginx通过root指定了代码的访问路径,我们项目的php文件都位于app目录下。

root /app

并且定义了如果用户请求的是php文件,则将请求转发给后端的php-fpm服务,该服务监听了9000端口(php-fpm目录的www.conf文件中定义)。

fastcgi_pass php-fpm:9000;

通过以上的配置可以看出nginx需要将php文件转发给后端的php-fpm服务,而nginx服务访问php-fpm服务的方式是通过服务名来访问。在我们的容器集群中,服务之间访问不需要知道服务的ip或者实例的ip,只需要指定服务名,集群会自动根据服务名做dns解析,如果一个服务有多个实例,dns解析的结果是等概率随机的,由于是等概率的,通过服务名来访问可以实现负载均衡。

二、实验

下面开始我们的实验。在项目目录执行以下命令,将项目build成docker镜像,并上传到镜像仓库中(请把镜像仓库空间tencentyun请换成自己的空间)

docker build -t ccr.ccs.tencentyun.com/tencentyun/nginx-php .
docker tag ccr.ccs.tencentyun.com/tencentyun/nginx-php ccr.ccs.tencentyun.com/tencentyun/nginx-php
docker push ccr.ccs.tencentyun.com/tencentyun/nginx-php

镜像上传完毕后,我们可以使用这个镜像分别创建两个服务,nginx和php-fpm,由于两个服务使用的是同一个镜像,在创建服务时注意:

  1. 服务名分别为 nginx和php-fpm,其中nginx服务名您可以改成其他名称比如frontend,但是php-fpm这个服务名不能改成其它名称,因为我们的nginx配置指定了访问php-fpm服务,如果没有这个服务,nginx转发php时会解析php-fpm服务出错
  2. nginx服务指定运行命令为nginx。
  3. php-fpm服务指定运行命令为php5-fpm。
  4. nginx服务的访问方式为提供公网访问,绑定容器和服务的端口均为80。
  5. php-fpm服务的访问方式为仅在集群内访问,绑定容器和服务的端口为9000。

nginx和php-fpm服务创建成功后,我们可以根据nginx服务的外网ip来访问我们的项目的index和info.php。

本文实验的项目源码下载

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Deployment vs ReplicationController in Kubernetes

    此文主要选择了两个最常用的 controller : Deployment 和 ReplicationController ,从各自功能,优缺点方面进行对比,...

    腾讯云容器服务团队
  • 8 月最新基于 kubernetes 的应用编排实践

    本文讲述关于应用编排的实践话题,在腾讯云容器服务应用编排的实践部分,主要会涉及配置管理,应用模板管理,基于应用的服务组管理等内容。

    腾讯云容器服务团队
  • 华尔街见闻:基于腾讯云容器服务的微服务架构实践

    本文介绍了华尔街见闻通过重构和服务容器的重新部署,实践微服务架构的情况。经过几个月的开发测试,我们不仅完成了线上服务从PHP到Golang的转型,更在服务的稳定...

    腾讯云容器服务团队
  • nginx的502问题

    老七Linux
  • lnmp环境快速搭建及原理解析

    刚开始学习php的时候是在wamp环境下开发的,后来才接触到 lnmp 环境当时安装lnmp是按照一大长篇文档一步步的编译安装,当时是真不知道是在做什么啊!脑袋...

    码缘
  • nginx 解决 connect() failed (111: Connection refused) while connecting to upstream,

    也不知道什么问题,就去看了一下nginx日志  /var/log/nginx/error.log,发现了这个错误

    双面人
  • centOS7 安装配置 lnmp参考博客整理

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

    用户3056046
  • 使用Docker快速搭建Nginx+PHP-FPM+MySQL+phpMyAdmin环境

    fastcgi_pass 地址为:主机ip+9000。因为在上面的步骤中,我已经把端口映射出来了。

    py3study
  • Linux系统下搭建LNMP环境

    “每个理性的IT人士都置顶了吴柯的运维笔记” LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。 Linux是一类Unix计...

    吴柯
  • 教你如何在Mac系统下自由搭建Nginx+php-fpm

    由于一直在虚拟机的状态下开发PHP,尝试一下mac本地搭建环境.mac本身是自带Apache+php的,在低版本的mac系统中,mac中的php版本是5.6的版...

    卡二条的技术圈子

扫码关注云+社区

领取腾讯云代金券