ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# nginx模块-负载均衡和反向代理 [TOC] ## 一、 简单介绍 ### 1. 说明 1)功能说明 * ngx_http_proxy_module 反向代理模块把用户请求抛给服务器节点/池 * ngx_http_upstream_module 负载均衡模块,实现网站的负载均衡和节点健康检查 2)官方链接 [负载均衡](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream) [反向代理](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass ) ### 2. 语法 **1)负载均衡** ```sh Syntax: upstream name { ... } Context: http ``` eg: ```sh upstream oldboy { server 10.0.0.7:80; server 10.0.0.8:80; server 10.0.0.9:80; } ``` 说明:upstream模块就类似定一个一个地址池或者说定一个web服务器组 **2)反向代理** ```sh Syntax: proxy_pass URL; Context: location, if in location, limit_except ``` eg: ```sh location / { proxy_pass http://upload; } ``` 说明:proxy_pass主要用于进行抛送用户访问请求给upstream模块中的相应节点服务器 ## 二、 安装配置 ### 1. yum安装 ``` yum install nginx #需要阿里的epel源 egrep -v "#|^$" /etc/nginx/nginx.conf.default >/etc/nginx/nginx.conf ``` ### 2. 修改配置文件 ```sh cat /etc/nginx/nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream noah { server 10.0.0.7:80; server 10.0.0.8:80; server 10.0.0.9:80; } server { listen 80; server_name localhost; root html; index index.html index.htm; location / { proxy_pass http://noah; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; } } } ``` `upstream noah`和`location /`部分,为增加的反向代理和负载均衡模块 proxy_set_header选项的解释在最后面 ### 3. 启动nginx ```sh nginx -t /etc/init.d/nginx start ``` ## 三、 检测 ### 1. 利用浏览器进行测试 * 进行hosts解析 * 浏览以下网址`http://www.etiantian.org/oldboy.html ` * 利用ctrl+F5强制刷新测试 检查是否进行负载调度 ### 2. 利用curl命令进行测试 ```sh [root@xxx ~]# curl -H host:www.etiantian.org 10.0.0.5/oldboy.html web01 www.etiantian.org [root@xxx ~]# curl -H host:www.etiantian.org 10.0.0.5/oldboy.html web02 www.etiantian.org [root@xxx ~]# curl -H host:www.etiantian.org 10.0.0.5/oldboy.html web03 www.etiantian.org ``` ## 四、 proxy_set_header解释 1. `proxy_set_header Host $host`的作用: 将用户的请求头一起直接交给服务器,而不省略;在做负载均衡时要记得加此参数,否则可能可能导致以下问题: * 别名网址循环解析 * 有多个server标签但却只能解析第一个标签的网址 * http版本会由1.1变为1.0,apache会不提供访问 2. `proxy_set_header X-Forwarded-For $remote_addr`的作用: 将用户的ip传递给web服务器,以便web服务器日志记录用户IP而非代理IP,需要日志格式中定义了http_x_forwarded_for选项