Nginx代理和负载均衡

Nginx代理

nginx代理运作模式

用户<-->代理服务器<-->WEB服务器

代理服务器使用环境:

  1. 用户访问web服务器过慢,例如访问国外某些网站
  2. WEB服务器只可以进行内网通讯

以百度做测试:

在没有配置代理的时候用本地ip访问百度

[root@CentOS-1 vhost]# curl -x127.0.0.1:80 www.baidu.com/robots.txt
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.8.0</center>
</body>
</html>

显示被拒绝

配置代理conf文件

[root@CentOS-1 ~]# cd /usr/local/nginx/conf/vhost/
#进入nginx配置文件所在文件夹
[root@CentOS-1 vhost]# vi proxy.conf

server
{
  listen 80;
  server_name www.baidu.com;
  #定义要访问的域名
  
 location /
 {
  proxy_pass http://61.135.169.121/;
  #定义使用的代理ip,这里使用的是百度的ip
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 }
}

#保存后测试是否有语法错误
[root@CentOS-1 vhost]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
#再次测试使用本地ip访问百度
[root@CentOS-1 vhost]# curl -x127.0.0.1:80 www.baidu.com/robots.txt
User-agent: Baiduspider
Disallow: /baidu
Disallow: /s?
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/

User-agent: Googlebot
Disallow: /baidu
Disallow: /s?

#测试成功,代理配置完成

nginx负载均衡配置

负载均衡可以理解为代理多台服务器,借助了upstream模块。

  • 此次测试使用qq.com作为测试目标

需要使用到dig命令,如果服务器没有这条命令则 安装bind-utils包

  • 使用dig命令获取qq.com返回的ip
[root@CentOS-1 vhost]# dig qq.com
#dig命令相当于ping这个域名,但是ping只能显示一个ip,dig却可以显示多个ip

; <<>> DiG 9.9.4-RedHat-9.9.4-74.el7_6.2 <<>> qq.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26107
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;qq.com.				IN	A

;; ANSWER SECTION:
qq.com.			185	IN	A	111.161.64.40
qq.com.			185	IN	A	111.161.64.48
#此处显示为qq.com绑定了两个ip

;; Query time: 16 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: 四 9月 05 15:47:59 CST 2019
;; MSG SIZE  rcvd: 67

  • 写一个负载均衡的配置文件
[root@CentOS-1 vhost]# vi ld.conf
upstream qq_com
{
   ip_hash;
   #目的是同一个用户始终保持在一个机器上
   server 111.161.64.40:80;
   server 111.161.64.48:80;
}
server
{
     listen 80;
     server_name www.qq.com;
     location /
     {
         proxy_pass http://qq_com; #此处名称要和upstream一直
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     }
}
#测试是否有语法错误
[root@CentOS-1 vhost]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

#在没有配置负载均衡前用本地ip访问qq.com会访问默认虚拟主机(之前设置过deny all)
[root@CentOS-1 vhost]# curl -x127.0.0.1:80 www.qq.com
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.8.0</center>
</body>
</html>

#重新加载nginx配置文件
[root@CentOS-1 vhost]# nginx -s reload
#测试用本地ip访问qq.com,由于代码过多,只显示10行
[root@CentOS-1 vhost]# curl -x127.0.0.1:80 www.qq.com|tail -10
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  234k    0  234k    0     0   652k      0 --:--:-- --:--:-- --:--:--  654k
      mta.setAttribute("name", "MTAH5");
      mta.setAttribute("sid", "500460529");
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(mta, s);
  })();
  </script>

</body>

</html><!--[if !IE]>|xGv00|b335a415bebc37d9cf6ee88fee33e4c3<![endif]-->

tip:nginx不支持代理https 新版nginx支持代理tcp

总结:

nginx负载均衡就是用户发送请求到nginx服务,nginx转发用户请求。nginx可以给本机上的网站做负载均衡。

用本地服务器测试,结果如下

[root@CentOS-1 vhost]# vi proxy2.conf
#编写代理脚本
server
{
  listen 80;
  server_name mxiaoqi.top;

 location /
 {
  proxy_pass http://192.168.7.78/;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 }
}

[root@CentOS-1 vhost]# rm -f mxiaoqi.top.conf
#删除相关网站配置文件
[root@CentOS-1 vhost]# nginx -t
#测试代理脚本是否有错误
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@CentOS-1 vhost]# nginx -s reload
#重新加载nginx配置文件
[root@CentOS-1 vhost]# curl -x127.0.0.1:80 mxiaoqi.top -I
#网站测试访问正常
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Thu, 05 Sep 2019 09:02:06 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.32
Link: <http://mxiaoqi.top/index.php?rest_route=/>; rel="https://api.w.org/"

[root@CentOS-1 vhost]# mv proxy2.conf proxy2.conf.bak
#删除代理配置文件
[root@CentOS-1 vhost]# curl -x127.0.0.1:80 mxiaoqi.top -I
#测试可以正常访问网站
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Thu, 05 Sep 2019 09:02:34 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.32
Link: <http://mxiaoqi.top/index.php?rest_route=/>; rel="https://api.w.org/"

[root@CentOS-1 vhost]# nginx -s reload
#重新加载nginx配置文件
[root@CentOS-1 vhost]# curl -x127.0.0.1:80 mxiaoqi.top -I
#测试,访问到默认虚拟主机
HTTP/1.1 403 Forbidden
Server: nginx/1.8.0
Date: Thu, 05 Sep 2019 09:02:40 GMT
Content-Type: text/html
Content-Length: 168
Connection: keep-alive

[root@CentOS-1 vhost]# mv mxiaoqi.top.conf.bak mxiaoqi.top.conf
#恢复网站配置文件
[root@CentOS-1 vhost]# nginx -s reload
#重新加载配置文件
[root@CentOS-1 vhost]# curl -x127.0.0.1:80 mxiaoqi.top -I
#测试访问网站正常
HTTP/1.1 200 OK
Server: nginx/1.8.0

END

转载于:https://my.oschina.net/u/3850968/blog/3102420

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值