前端h5页面和后端php服务的几种部署方式

这篇具有很好参考价值的文章主要介绍了前端h5页面和后端php服务的几种部署方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、背景

和java后端服务的部署不同,前端h5的部署有好几种。

  • CDN+OSS
  • nginx反向
  • 把输出物全部拷贝到后端

所以,这就带来了部署上的歧义,到底该用哪种部署方式呢?

本文以前端h5搭配后端php程序为示例,试着讨论一下他们之间的配合部署。
这里的前端h5是仅限静态页面,不包括nodejs等独立运行的前端程序。

二、部署Php服务

php服务可以使用以下两种方式:

  • nginx反向代理php文件
  • nginx + php-fpm

第一种方式和第二种方式不同,要求php文件和nginx在同一机器。
第二种方式,因为php-fpm会新建一个进程,所以允许nginx不在同一个机器。

php-fpm不在本文的论述范围内,可以去网上寻找一些更加详细的资料。这里侧重于部署。

三、部署方案之h5和php同源部署

为了达到同源,也即同一个域名的访问入口,不同的uri前缀会转向到不同的地方。

比如,/api开头的接口指向php服务,其他默认指向h5静态页面。

1、php和h5在同一个机器

前端h5页面和后端php服务的几种部署方式,前端,php,html5,持续部署,开发语言,docker

2、php和h5不在一个机器

因为不在一个机器,所以域名指向一个新的api网关,比如kong。由kong配置两个upstream,一个是php upstream,另一个是h5 upstream。

前端h5页面和后端php服务的几种部署方式,前端,php,html5,持续部署,开发语言,docker
你需要开发一个kong 自定义插件,区分不同的uri转向到不同的upstream后端。

四、部署方案之跨域部署

不同源后,也就会带来跨域问题。所以本方案叫做跨域部署方案。

前端h5页面和后端php服务的几种部署方式,前端,php,html5,持续部署,开发语言,docker

  • 如果你的h5网站是TO C端,建议你使用CDN+OSS的部署方式。
  • php服务的反向代理nginx,必须设置CORS跨域。

具体操作见下:

在 Nginx 上配置 CORS(跨域资源共享)头,允许前端应用跨域访问 PHP 后端。在 Nginx 的配置文件中添加如下配置:

location / {
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}

这里顺便说下,如果是Kong网关的话,开启cors插件即可。

前端h5页面和后端php服务的几种部署方式,前端,php,html5,持续部署,开发语言,docker

前端h5页面和后端php服务的几种部署方式,前端,php,html5,持续部署,开发语言,docker

  • 使用CI/CD工具,把h5静态页面发布到OSS。(后期我将介绍使用Jenkins插件,把H5静态页面部署到OSS)

五、Nginx反向代理php和h5

1、php-fpm + h5

这种方式,就是比较“耗端口”,Nginx监听9036,而Php-fpm监听另外一个端口9035。而如果是java程序,只需要nginx监听80,不同的服务对应不同的域名即可。

server {
    listen 9036;
    server_name platform.xxx.cloud;

    set $static_root '/opt/h5/platform-web/platform-web/dist';
    set $php_root '/opt/php/platform-php/platform-php/public';
    root $static_root;

    index index.html index.htm index.php;
    
    access_log /data/nginx/logs/platform_access.log;
    error_log /data/nginx/logs/platform_error.log;

    # 以.php结尾的请求。它将这些请求传递给 PHP-FPM 进程(通过 127.0.0.1:9035 地址)进行处理
    location ~ \.php$ {
        root $php_root;
        fastcgi_pass   127.0.0.1:9035;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 32 32k;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
    }

    # 匹配uri以/结尾的接口,示例:/api/v1/user/userId/{userId}后不小心多加了一个斜杆
    # 既匹配/api/v1/user/userId/1002, 也匹配/api/v1/user/userId/1002/
    # 都未匹配到,则转向到首页
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 处理以 /api/ 开头的请求
    location ^~ /api/ {
        root $php_root;
        if (!-e $request_filename) {
            rewrite  ^(.*)$  /index.php?s=/$1  last;
            break;
        }
    }

    # 设置首页不缓存
    location = /index.html {
        add_header Cache-Control no-cache;
        add_header Pragma no-cache;
        add_header Expires 0;
    }

    # 设置静态页面的缓存过期时间
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires       max;
        log_not_found off;
        access_log    off;
    }
}

2、php + h5

不建议这种部署。

使用 Nginx 的 fastcgi_pass 指令来将请求传递给 PHP 解释器,适用于开发阶段。

你需要明确sock文件的路径,相当于是给java程序指明JAVA_HOME。

# 处理 PHP 脚本的配置
location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;  # 替换为你的 PHP-FPM sock 文件路径
}

3、静态页面h5

server {
    listen 9086;
    server_name  tea.xxx.com;

    location / {
        index index.html;
        alias "/opt/h5/tea-web/dist/" ;
    }
    access_log  /data/nginx/logs/tea-web_access.log  main;
    error_log  /data/nginx/logs/tea-web_error.log;
}

六、总结

本文把部署的几种方案作了一个简单示意,后文我将讲述如何在kong中配置。

另外,本文也没有提及目前流行的一种部署方式–容器部署,后文也一并抽空整理出来。文章来源地址https://www.toymoban.com/news/detail-797499.html

到了这里,关于前端h5页面和后端php服务的几种部署方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手机web前端调试页面的几种方式

    PC端web页面调试比较容易,这里主要说几种移动端调试的方法,从简单到复杂、从模拟调试到远程调试,大概分为几部分: 1、Chrome DevTools(谷歌浏览器)的模拟手机调试 2、weinre(web inspector remote)远程调试工具 3、微信的“web开发者工具”,集成了Chrome DevTools和weinre,做的比较好

    2024年02月09日
    浏览(43)
  • uniapp 开发H5页面,实现语音识别功能--前端,不包含后端转换

    一、背景 微信小程序开发,内嵌h5页面,不能调用微信内部的插件 二、实现方式 通过安装  js-audio-recorder  插件实现既定需求 三、具体步骤 1、安装插件 npm i js-audio-recorder 2、引入 在需要使用的页面中引入:import Recorder from \\\'js-audio-recorder\\\'; 3、具体配置

    2024年04月13日
    浏览(45)
  • 前端注册登录页面数据库交互(h5+css+php+mysql+axios)

    一个登录注册界面,并使用前端数据库实现登陆注册功能  首先是index.html 直接在index.html里面写了用axios,实现注册和登录 效果图 登录注册滑动实现 script.js style.css 然后是登录和注册的php login.php register.php

    2024年02月11日
    浏览(45)
  • 前端如何提交数据给后端(包含前端和后端代码)

    如果你想提交表单数据到服务器,可以使用Ajax技术将表单数据通过HTTP POST请求到发送到服务器. 前端代码如下 在上面的代码中,我们使用 jQuery 的 $.ajax() 方法将表单数据转化为 JSON 并通过 HTTP POST 请求发送到服务器的 /submit-form 路径。服务器可以通过该路径接收表单数据并进行

    2024年02月09日
    浏览(48)
  • 前端和后端交互方式

    前端和后端交互一般通过HTTP请求和响应来进行。前端通过浏览器向后端发送请求,后端收到请求后进行处理并返回响应,前端接收响应后进行相应的处理。具体的交互方式如下: AJAX:前端通过JavaScript发起异步请求,向后端发送数据并接收响应,然后在页面上动态更新数据。

    2024年01月21日
    浏览(43)
  • 前端分页和后端分页

    分页可以在前端或后端进行,具体取决于项目的需求和实现方式。以下是前端分页和后端分页的一些特点和适用场景: 前端分页 : 特点 :前端分页是指在前端(浏览器端)对数据进行分页处理,即一次性获取所有数据,然后在前端进行分页展示和切换。 优点 :减轻了服务

    2024年04月10日
    浏览(74)
  • 前端和后端分别是什么?

      从技术工具来看: 前端:常见的 html5、JavaScript、jQuery... 后端:spring、tomcet、JVM,MySQL... 毕竟,如果这个问题问一个老后端,他掰掰手指可以给你罗列出一堆的名词来,比如设计模式、数据库优化、框架、JVM、网络编程...... 从简单描述来看: 前端:入门简单,先易后难,

    2024年02月09日
    浏览(46)
  • 前端和后端交互数据类型转换

    页面是男/女 后端pojo类以及数据库中是Integer 0/1  怎么样很方便地转化? ----枚举转化-- 在web开发中有时会使用枚举作为参数,而前端在调接口时就会出现传错或者传空导致后端拿不到枚举类型。在这里就使用反序列化@JsonDeserialize 这里是对枚举进行反序列化,所以首先编写一个

    2024年03月26日
    浏览(57)
  • 前端和后端解决跨域问题的方法

    目前很多java web开发都是采用前后端分离框架进行开发,相比于单体项目容易产生跨域问题。  后端接收到请求并返回结果了,浏览器把这个响应拦截了。 浏览器 基于同源策略,如果请求的网页和当前的服务 不是同源的 ,并且发送的是 XHR (XMLHttpRequest)请求,就会产生跨域

    2024年04月26日
    浏览(43)
  • IC设计的前端和后端是如何区分的?

    **1、IC前端:**根据芯片规格书完成SOC的设计和集成, 使用仿真验证工具完成SOC的设计验证。 **2、IC后端:**将前端设计产生的门级网表通过EDA设计工具进行布局布线和进行物理验证并最终产生供制造用的GDSII数据 **1、IC前端:**熟悉处理器/DMA/AXI/AHB总线。 **2、IC后端:**芯片物

    2024年01月24日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包