详解Nginx 利用代理转发请求示例

我们米扑科技的业务遍布全球,有时国外的客户无法访问我们搭建在国内的服务,这就要求我们在国外服务器上搭建一个代理转发服务,用户请求国外服务器的域名,然后代理转发到国内,处理请求后返回结果给国外的客户。Nginx 不仅可以实现负载均衡,还可以实现反向代理转发,非常适合我们的使用场景,因此我们米扑科技采用 Nginx 利用代理转发请求实例。

Nginx 利用代理转发请求实例

nginx 作为目前最流行的web服务器之一,可以很方便地实现反向代理。

nginx 反向代理官方文档: NGINX REVERSE PROXY

当在一台主机上部署了多个不同的web服务器,并且需要能在80和443端口同时访问这些web服务器时,可以使用 nginx 的反向代理功能,用 nginx 在80端口监听所有请求,并转发给443端口,再由443端口统一依据转发规则转发到对应的国内web服务器上。

示例:

proxy.mimvp.com 域名在阿里云备案,部署在国内的北京阿里云服务器

proxy.mimgu.cn 域名在腾讯云备案,部署在国外的新加坡腾讯云服务器(国外域名可不备案)

1. 国内北京阿里云服务器(proxy.mimvp.com)

vim mimvp_proxy.conf
server {
 listen  80;
  server_name proxy.mimvp.com;  # 域名可以有多个,用空格隔开
  root  www/mimvp_proxy;
 rewrite ^(.*)$ https://$host$1 permanent;

  location / {
    root  www/mimvp_proxy;
    index  index.php index.html index.htm;
  }

  location ~ \.php$ {
    root    www/mimvp_proxy;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
    include   fastcgi.conf;
  }

 location ~* ^/(images|img|javascript|js|css|blog|flash|media|static)/ {
  root  www/mimvp_proxy;
  expires  30d;
 }

 location ~* ^/(robots\.txt) {
  root  www/mimvp_proxy;
  expires  365d;
 }

 location ~* ^/favicon\.ico {
  root  www/mimvp_proxy;
  expires  365d;
 }

 location ~* ^/img/logo\.png {
  root  www/mimvp_proxy;
  expires  365d;
 }

 location ~ /\.ht {
  deny all;
 }
}
server {
 listen   443 ssl http2;
 server_name  proxy.mimvp.com;  # 域名可以有多个,用空格隔开
 root   www/mimvp_proxy;
 ssl    on;
 ssl_certificate  proxy.mimvp.com.crt;
 ssl_certificate_key proxy.mimvp.com.key;

 ssl_session_cache shared:SSL:1m;
 ssl_session_timeout 10m;

 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
 ssl_prefer_server_ciphers on;

  location / {
    root  www/mimvp_proxy;
    index  index.php index.html index.htm;
  }

  location ~ \.php$ {
    root    www/mimvp_proxy;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
    include   fastcgi.conf;
  }

 location ~* ^/(images|img|javascript|js|css|blog|flash|media|static)/ {
  root  www/mimvp_proxy;
  expires  30d;
 }

 location ~* ^/(robots\.txt) {
  root  www/mimvp_proxy;
  expires  365d;
 }

 location ~* ^/favicon\.ico {
  root  www/mimvp_proxy;
  expires  365d;
 }

 location ~* ^/img/logo\.png {
  root  www/mimvp_proxy;
  expires  365d;
 }

 location ~ /\.ht {
  deny all;
 }
}

2. 国外新加坡腾讯云服务器(proxy.mimgu.cn)

vim mimvp_proxy2.conf

server {
 listen  80;
  server_name proxy.mimgu.cn;
  root  www/mimvp_proxy;
 rewrite ^(.*)$ https://$host$1 permanent; ## 全部请求强制跳转到 https
}
server {
 listen   443 ssl http2;
 server_name  proxy.mimgu.cn;
 root   www/mimvp_proxy;
 ssl    on;
 ssl_certificate  proxy.mimgu.cn.crt;
 ssl_certificate_key proxy.mimgu.cn.key;

 ssl_session_cache shared:SSL:1m;
 ssl_session_timeout 10m;

 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
 ssl_prefer_server_ciphers on;

  location / {
    proxy_pass   https://proxy.mimvp.com; ## 全部请求强制跳转到国内服务器 https://proxy.mimvp.com
  }

  location ~ \.php$ {
    proxy_pass   https://proxy.mimvp.com;
  }

 location ~* ^/(images|img|javascript|js|css|blog|flash|media|static)/ {
  proxy_pass   https://proxy.mimvp.com; ## css,js,img 等全部要强制转发,否则可能排版错乱
 }

 location ~* ^/(robots\.txt) {
  proxy_pass   https://proxy.mimvp.com;
 }

 location ~* ^/favicon\.ico {
  proxy_pass   https://proxy.mimvp.com;
 }

 location ~* ^/img/logo\.png {
  proxy_pass   https://proxy.mimvp.com;
 }

 location ~ /\.ht {
  deny all;
 }
}

3. 查看效果

http proxy.mimvp.com // 强制跳转到 https proxy.mimvp.com

https proxy.mimvp.com // 对外显示的唯一域名网址

http proxy.mimgu.cn // 强制跳转到 https proxy.mimgu.cn,然后继续强制跳转到 https proxy.mimvp.com

https proxy.mimgu.cn // 强制跳转到 https proxy.mimvp.com

小结

  1. 四个域名,统一跳转指向唯一的服务 https proxy.mimvp.com
  2. http 实现了强制跳转到 https ,整个网站使用ssl加密
  3. 国外的腾讯云域名(proxy.mimgu.cn),nginx代理转发到了国内阿里云域名(proxy.mimvp.com)
  4. 上面nginx配置文件,是一个经典的配置,信息量大

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • nginx反向代理用做内网域名转发

    由于公司内网有多台服务器的http服务要映射到公司外网静态IP,如果用路由的端口映射来做,就只能一台内网服务器的80端口映射到外网80端口,其他服务器的80端口只能映射到外网的非80端口.非80端口的映射在访问的时候要域名加上端口,比较麻烦.并且公司入口路由最多只能做20个端口映射. 肯定以后不够用. 然后发现可以在内网搭建一个nginx反向代理服务器,将nginx反向代理服务器的80映射到外网IP的80,这样指向到公司外网IP的域名的HTTP请求就会发送到nginx反向代理服务器,利用ngin

  • Nginx服务器作反向代理实现内部局域网的url转发配置

    情景 由于公司内网有多台服务器的http服务要映射到公司外网静态IP,如果用路由的端口映射来做,就只能一台内网服务器的80端口映射到外网80端口,其他服务器的80端口只能映射到外网的非80端口.非80端口的映射在访问的时候要域名加上端口,比较麻烦.并且公司入口路由最多只能做20个端口映射.肯定以后不够用. 然后k兄就提议可以在内网搭建个nginx反向代理服务器,将nginx反向代理服务器的80映射到外网IP的80,这样指向到公司外网IP的域名的HTTP请求就会发送到nginx反向代理服务器,利用

  • 详解Nginx 利用代理转发请求示例

    我们米扑科技的业务遍布全球,有时国外的客户无法访问我们搭建在国内的服务,这就要求我们在国外服务器上搭建一个代理转发服务,用户请求国外服务器的域名,然后代理转发到国内,处理请求后返回结果给国外的客户.Nginx 不仅可以实现负载均衡,还可以实现反向代理转发,非常适合我们的使用场景,因此我们米扑科技采用 Nginx 利用代理转发请求实例. Nginx 利用代理转发请求实例 nginx 作为目前最流行的web服务器之一,可以很方便地实现反向代理. nginx 反向代理官方文档: NGINX REVER

  • 详解Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载: CentOS 6.4下载地址:http://www.jb51.net/softs/78243.html Nginx下载地址:http://www.jb51.net/softs/35633.html 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.nginx作为web服务器的操作讲解.nginx作为LNM

  • 详解Nginx反向代理和负载均衡部署指南

    Nginx反向代理和负载均衡部署指南,具体如下: 1.  安装 1) 从Nginx官网下载页面(http://nginx.org/en/download.html)下载Nginx最新版本(目前是1.5.13版本)安装包: 2)  解压后复制到部署目录. 2.  启动和停止Nginx Nginx目前只支持命令行操作,操作前先进入Dos命令环境,并进入Nginx部署目录. 1) 启动Nginx:start nginx 2)  停止Nginx:nginx -s stop 3)修改配置后重启:nginx

  • 详解Nginx反向代理跨域基本配置与常见误区

    跨域是指a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源.注意:跨域限制访问,其实是浏览器的限制.理解这一点很重要!!! 最近公司前后端分离,前端独立提供页面和静态服务很自然的就想到了用nginx去做静态服务器.同时由于跨域了,就想利用nginx的反向代理去处理一下跨域,但是在解决问题的同时,发现网上有些方案的确是存在一些问题,在这里总结一下基本配置,也聊一下常见的配置问题. Ng

  • 详解Nginx反向代理WebSocket响应403的解决办法

    在Nginx反向代理一个带有WebSocket功能的Spring Web程序(源代码地址 )时,发现访问WebSocket接口时总是出现403响应,Nginx的配置参考的是 官方文档 : http { // ssl 相关配置 ... map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 8020; location /ws { proxy_pass http://some-ip:8

  • 详解Nginx反向代理实现Kibana登录认证功能

    Kibana 5.5 版后,已不支持认证功能,也就是说,直接打开页面就能管理,想想都不安全,不过官方提供了 X-Pack 认证,但有时间限制.毕竟X-Pack是商业版. 下面我将操作如何使用Nginx反向代理实现kibana的认证功能. 先决条件: <Centos 7 源码编译安装 Nginx> 安装Apache Httpd 密码生成工具 $ yum install httpd-tools -y 生成Kibana认证密码 $ mkdir -p /usr/local/nginx/conf/pas

  • 详解Nginx反向代理到Tomcat服务器

    在实际生产中,Tomcat服务器一般不单独使用在项目中,对于静态资源的响应Nginx表现的比较好,另外由于nginx是专门用于反向代理的服务器,所以很容易实现将java的请求转发到后端交给tomcat容器处理,而本身用来处理静态资源 在Nginx中,一个server {}块往往用来配置一个比较大的项目,一般就是对于一个域名的所有配置,一个server块内一般有多个location来定义多个请求规则,比如域名和根目录配置,静态资源支持,php fastcgi请求,url重写,错误页面配置等多种配置

  • 详解nginx反向代理配置及优化

    前言: 由于服务器apache抗不住目前的并发.加上前端squid配置后,问题依然无法解决.而页面程序大部分是动态.无法使用fastcgi来处理.因此想使用nginx做为反向代理apache.整个配置安装过程很简单.在考虑高并发的情况下,在安装前就做了些优化.目前配置能抗住3000以上并发.好像不是特别大哦?呵~~ 但足以~~ 只是还有少量499问题..期待有人跟我讨论解决 第1部分:安装 1 建立用户及组 /usr/sbin/groupadd www /usr/sbin/useradd -g

  • 详解Nginx反向代理实现会话(session)保持的两种方式

    一.ip_hash: ip_hash使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用. ip_hash语法: upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; server backend3.example.com down; server backend4.example.com; } ip_hash简单易用,但有如下问题: 当后端服务器宕

  • 如何利用node转发请求详解

    前言 本篇文章基于 vue.node(koa) 需求 vue 项目开发过程中,接口跨域是一个很常见的问题.在开发时候可以用 vue 自带的 proxy 可以轻松解决.生产环境下,前端项目往往是部署在后端项目下,不会存在跨域的问题,接口前缀可以忽略. dev 环境下,请求一个产品列表接口,我们可能会这么做: https://www.baidu.com/api/product/list 生产环境下,前缀可以忽略: /api/product/list 问题来了,如果我们想在本地测试生产环境下的前端项目

随机推荐