反向代理:用一台机子代理后端服务求接收客户端请求,并分发请求给后端服务器
1、反向代理配置(依赖ngx_http_proxy_module 模块实现 在location标签里加如下配置)
vim /etc/nginx/conf.d/test.conf #修改代理服务器配置 ,最好将默认配置子文件备份
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://你要代理的后端服务器ip; #真实后端服务器的地址,可以是ip也可以是域名和url地址
proxy_redirect default; #如果真实服务器使用的是的真实IP:非默认端口。则改成IP:默认端口
proxy_set_header Host $http_host; # 重新定义或者添加发往后端服务器的请求头
proxy_set_header X-Real-IP $remote_addr; #只记录连接服务器的上一个ip地址信息。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ##通过这个选项可以记录真正客户端机器的ip地址
#上面这里几行最好全写,下面为调优可选
proxy_connect_timeout 30; #后端服务器连接的超时时间发起三次握手等候响应超时时间
proxy_send_timeout 60; #后端服务器数据回传时间,就是在规定时间之内后端服务器必须传完所有的数据
proxy_read_timeout 60; #ginx接收upstream(上游/真实) server数据超时, 默认60s, 如果连续的60s内没有收到1个字节, 连接关闭。像长连接
}
}
负载均衡要结合反向代理一起使用
2、负载均衡配置(依赖:upstream 在server{}标签上面加upstream{}标签)
vim /etc/nginx/conf.d/test.conf
…
upstream testapp { #实现负载均衡的标签,下面为代理的服务器ip ,其中testapp为自定义
server 10.0.105.199:8081;
server 10.0.105.202:8081;
}
server {
…
location / {
proxy_pass http://testapp; #当有负载均衡是这里写testapp后端地址池 请求转向 testapp 定义的服务器列表
}
作为代理服务器里的location不在有网站发布目录,location里写的是反向代理的配置,网站发布目录都在后端服务上。
下面是反向代理+负载均衡的完整配置(用了两个地址池,及两个location个匹配)
upstream static {
server 192.168.142.159 weight=1;
}
upstream php {
server 192.168.142.165 weight=1;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location ~\.(jpg|png|css|js)$ {
proxy_pass http://static;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~\.(php|jsp)$ { #~\. $ 代表匹配以.php或.jsp结尾的
proxy_pass http://php;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
3、通过nginx的反向代理和负载均衡来实现动静分离
其中就是将静态代码放在一些后端服务器,动态代码(php,java)放在另一些后端服务器
然后在代理机上分别写静态upstream地址池,动态upstream地址池,然后也写两个location来匹配代理这些地址池 上面的就是代理机的配置
下面分别为后端动静服务器配置
后端静态服务器配置:
server {
listen 80;
server_name localhost;
location ~ \.(html|jpg|png|js|css) {
root /home/www/nginx;
expires 1d; #为客户端设置静态资源缓存时间
}
}
后端动态服务器配置:
server {
listen 80;
server_name localhost;
location ~ .php$ {
root /home/nginx/html; #指定网站目录
fastcgi_pass 127.0.0.1:9000; #开启fastcgi连接php地址
fastcgi_index index.php; #指定默认文件
fastcgi_param SCRIPT_FILENAME
d
o
c
u
m
e
n
t
r
o
o
t
document_root
documentrootfastcgi_script_name; #站点根目录,取决于root配置项
include fastcgi_params; #包含fastcgi使用的常量
}
}
fastcgi_param SCRIPT_FILENAME 这一行要将原来的换成
d
o
c
u
m
e
n
t
r
o
o
t
document_root
documentrootfastcgi_script_name