当前位置:首页 > 技术文章 > 正文内容

前后端都用得上的Nginx 反向代理,具体应用实战

arlanguage4个月前 (12-29)技术文章42

1、nginx 隐藏端口

服务器上的一个端口只能被一个程序使用,要想实现多个程序共用一个端口,可以使用Nginx转发:用 Nginx 监听 80 端口,当有 HTTP 请求到来时,将 HTTP 请求的 HOST 等信息与其配置文件进行匹配并转发给对应的应用

server {
    listen 80;
    server_name _;
    location / {
    		server_name_in_redirect off;
      	proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8009;
    }
}

http://localhost:80 转发到 http://127.0.0.1:8009

2、nginx 端口转发到指定路径

server {
    listen 80;
    server_name _;
    location /api/ {
            proxy_redirect off;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:8086/;
        }
}
http://localhost:80/api/ 转发到 http://127.0.0.1:8086/

3、根据请求后缀分发

server {
    listen 80;
    server_name _;
    location ~/dev/ {
            proxy_redirect off;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:8086;
     }
     location ~/prod/ {
            proxy_redirect off;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:8087;
      }   
}
http://localhost:80/dev/ 转发到 http://127.0.0.1:8086/dev/  
http://localhost:80/prod/ 转发到 http://127.0.0.1:8087/prod/    

4、负责均衡

负载均衡,意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器、组件)上进行执行,是解决高性能、单点故障(高可用)、扩展性(水平伸缩)的终极解决方案。

如果请求数过大,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器的情况改为请求分发到多个服务器上,就是负载均衡。

upstream java_server {
    server 192.168.100:8086;
    server 192.168.100:8099;
}
server {
    listen 80;
    server_name _;
    location /java/ {
            proxy_redirect off;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://java_server/;
        }
}
http://localhost:80/java/ 转发到 http://127.0.0.1:8086/ 和 http://192.168.100:8099/

负载均衡实现的几种策略:

1、轮询(默认):每个请求按时间顺序逐一分配到不同的服务器,如果服务器down了,会自动剔除

upstream java_server {
    server 192.168.100:8086;
    server 192.168.100:8099;
}

2、权重:默认为1,权重越高,分配的请求越多。

upstream java_server {
    server 192.168.100:8086  weight=2; //8086服务可接受请求是8099服务的两倍
    server 192.168.100:8099;
}

3、ip_hash: 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后台服务器, 可以解决 session 的问题。

upstream java_server {
  	ip_hash;
    server 192.168.100:8086;
    server 192.168.100:8099;
}

4、fair(第三方):按后端响应时间进行分配,响应时间越短分配的请求越多。

upstream java_server {
  	fair;
    server 192.168.100:8086;
    server 192.168.100:8099;
}

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/528.html

标签: nginx 后缀名
分享给朋友:

“前后端都用得上的Nginx 反向代理,具体应用实战” 的相关文章

ThinkPhp6从安装到配置全解

Thinkphp6已经不支持之前安装方式了,只能使用Composer安装,对于V6的新用户来说,真希望有个全过程手册,我就分享一下我自己安装使用的过程,供参考。一、安装Composer在 Linux 和 Mac OS中可以运行如下命令:curl -sS https://getcomposer.org...

解决Apache 2.4+PHP5.6不支持CURL

跑一个demo,突然发现,服务器上最普通的Apache 2.4+PHP5.6组合,不支持curl,报告没有curl_init函数;而php.ini里面已经打开了php_curl.dll,而且php -i的输出是正常的,说明curl是可以执行的。折腾了半天百思不得其解,最后索性把php5.6、apac...

如何让Nginx更安全? nginx怎么保证高可用

网络安全的重要性不言而喻。那么小伙伴们有没有在日常使用 Nginx 的时候,特意去关注下它的安全配置呢?今天松哥和小伙伴们讨论一下如何安全的使用 Nginx,给大伙几个建议。一 使用最新版建议使用最新版的 Nginx,对于已经部署的 Nginx,要及时更新到最新版本,以确保所有已知的安全漏洞都已修补...

在AWS上组合使用ELB和Nginx Plus获得更多特性

使用AWS的客户经常问我们,对于负载均衡,到底是使用AWS的ELB还是Nginx Plus?Amazon曾经发布了一个白皮书来说明如何在AWS上配置Nginx Plus。本文将聚焦在选择Nginx Plus或者ELB时需要考虑的因素方面,也会讨论一些更适合于组合使用Nginx Plus和ELB的情形...

为什么服务器管理用户都使用宝塔面板?

宝塔面板宝塔面板到底是个什么鬼?为什么这么多站长使用宝塔面板?宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能。有30个人的专业团队研发及维护,经过200多个版本的迭代,功能全,少出错且足够安全,已获得...

nginx-UrlRewrite 实现URL重写转发

URL重写在前后端分离的开发模式中,会遇到这样一个需求:前端通过特定路由前缀来访问后端接口,例如:http://localhost/api/getUser,这里 api 即是每一个前端 request 所多加的前缀。nginx 需要把http://localhost/api/getUser 转换成后...