编程技术分享平台

网站首页 > 技术教程 正文

使用Nginx实现动静分离(nginx处理动态还是静态)

xnh888 2024-09-12 22:44:51 技术教程 25 ℃ 0 评论

Nginx 是一个高性能的http服务器,可以用来实现动态代理,负载均衡,最近需做一个web,mobile的分流处理, 接下来就使用Nginx来分流web和mobile的请求。


静态内容代理#

使用Nginx实现静态内容代理很简单,只需无行代码即可。打开Nginx配置文件在配置文件中添加如下代码。

  • Linux 系统配置文件目录 /etc/nginx/nginx.conf
  • OSX 系统配置文件目录 /usr/local/etc/nginx/nginx.conf
server {
        listen 80 default_server;         #指定监听端口
        server_name www.example.com;      #制定服务器域名或者ip
        location / {
            root /usr/share/nginx/html;   #服务器中存放静态文件的目录
            index index.html index.htm;   #默认访问页面
        }
 } 

后台服务#

通常前台静态文件和后台rest service是分开开发的,开发时可以用mock测试,部署的时候通过nginx 路由前端的http请求到后台服务器即可。

server {
        listen 81;
        server_name 99.99.99.99 example.com;
        root /usr/share/nginx/html;  
        index index.html index.htm; 

        #proxy_set_header 来设置
        location /api {
            proxy_pass http://api.example.com/;      # 指定后台服务器api地址
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段
            proxy_set_header X-Forwarded-Proto $scheme;   # $scheme 用来指明使用http还是https协议
            proxy_set_header X-Forwarded-Port $server_port;  #代理端口
        }
}

通过以上代码我们就实现了动静隔离,静态代码部署网站的静态文件(js,css,html,images), 后台服务通过代理访问

分离移动端和桌面端#

通常网站的入口都是统一的,由于web端和移动端有不同的属性,所以为了更好的用户体验需要两套代码, 我们希望使用移动客户端的希望他访问A页面,桌面端的访问B页面,此时就需要分离用户设备。

    server {
        listen 80;
        server_name 99.99.99.99 example.com;

        # 通过`http_user_agent`来判断用户访问的设备,当发现用户使用的是移动设备就把请求重写,访问指定的移动端页面
        <br>注意:if和( 之间必须有一个空格否则nginx启动时会报错</br>
        if ($http_user_agent ~* '(iPhone|iPod|iPad|Android|BlackBerry|webOS|Windows Phone'){ 
            rewrite ^(.*) http://mobile.example.com/ permanent;
        }

    }

    server {
        listen 80;
        server_name 10.10.10.10 mobile.example.com;

        root /var/www/html/mobile;
        index index.html index.htm;

        location /api {
            proxy_pass http://api.example.com/;      # 指定后台服务器api地址
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段
            proxy_set_header X-Forwarded-Proto $scheme;   # $scheme 用来指明使用http还是https协议
            proxy_set_header X-Forwarded-Port $server_port;  #代理端口
        }
    }

    

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表