一、安装nginx
以下1-3步骤都是在nginx均衡负载lb01机器操作:
1、下载
mkdir -p /server/tools
cd /server/tools
wget http://nginx.org/download/nginx-1.18.0.tar.gz
(从其他机器拷贝过来:scp nginx-1.18.0.tar.gz 172.16.1.5:/server/tools)
2、安装依赖
yum install pcre pcre-devel -y
yum install openssl openssl-devel -y #https加密。
3、编译安装步骤
useradd -u1111 -s /sbin/nologin nginx -M
id nginx
tar xf nginx-1.18.0.tar.gz
cd nginx-1.18.0/
./configure --user=nginx --group=nginx --prefix=/application/nginx-1.18.0/ --with-http_stub_status_module --with-http_ssl_module --with-pcre
make&&make install
ln -s /application/nginx-1.18.0/ /application/nginx
/application/nginx/sbin/nginx
netstat -lntup|grep nginx
二、配置相关文件
1、lb01配置nginx.conf
官方例子upstream backend
[root@lb01 /application/nginx/conf]#vim nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream backend {
server 10.0.0.7:80 weight=1;
server 10.0.0.8:80 weight=1;
#此处1:1可以改;按1:1的方式给7,8分配请求
}
server {
listen 80;
server_name www.etiantian.org;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
}
}
server {
listen 80;
server_name blog.etiantian.org;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
}
}
}
默认情况浏览器请求负载均衡器,会携带host字段,但是Nginx代理向后请求节点
默认在请求头里不带host字段。
配置Nginx代理向后请求节点默认在请求头里带host字段配置参数:
proxy_set_header Host $host;
2、lb01配置hosts文件
[root@lb01 /application/nginx/conf]#vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.1.5 lb01
172.16.1.6 lb02
172.16.1.7 web01
172.16.1.8 web02
172.16.1.9 web03
172.16.1.31 nfs01
172.16.1.41 backup
172.16.1.51 db01 db0l.etiantian.org
172.16.1.61 m01
10.0.0.5 www.etiantian.org blog.etiantian
3、web配置
1)web01:
[root@web01 /application/nginx/conf/extra]#cat 01_www.conf
server {
listen 80;
server_name www.etiantian.org;
location / {
root html/www;
index index.html index.htm;
}
}
[root@web01 /application/nginx/html/www]#cat index.html
www7
2)web02:
[root@web02 /application/nginx/conf/extra]# cat 01_www.conf
server {
listen 80;
server_name etiantian.org;
rewrite ^/(.*) http://www.etiantian.org/$1 permanent;
}
server {
listen 80;
server_name www.etiantian.org;
location / {
root html/www;
index index.html index.htm;
}
autoindex on;
access_log logs/access_www.log main;
}
[root@web02 /application/nginx/conf/extra]# cat ../../html/www/index.html
www8
PS:修改配置之后检查语法,重新加载
三、测试
1、虚拟机测试
[root@lb01 /application/nginx/conf]#curl www.etiantian.org
www7
[root@lb01 /application/nginx/conf]#curl www.etiantian.org
www8
[root@lb01 /application/nginx/conf]#curl www.etiantian.org
www7
[root@lb01 /application/nginx/conf]#curl www.etiantian.org
www8
[root@lb01 /application/nginx/conf]#for n in {1..100};do curl www.etiantian.org;sleep 1;done
www7
www8
www7
www8
....................测试成功
2、浏览器测试
我的是win10
在C:\Windows\System32\drivers\etc目录下找到hosts文件
在文件末尾加入10.0.0.5 www.etiantian.org
,保存
浏览器输入www.etiantian.org
,回车,不断刷新页面,发现www7与www8轮流显示。
四、日志
[root@web02 /application/nginx/logs]#cat access_www.log
10.0.0.5 - - [05/Oct/2020:20:10:49 +0800] "GET / HTTP/1.0" 200 5 "-" "curl/7.29.0" "-"
10.0.0.5 - - [05/Oct/2020:20:10:51 +0800] "GET / HTTP/1.0" 200 5 "-" "curl/7.29.0" "-"
此处ip是lb01代理的ip(之前在代理服务器curl www.etiantian.org留下的日志),我们需要记录的是用户的IP
增加proxy_set_header X-Forwarded-For $remote_addr;
#<==这是反向代理时,节点服务器获取用户真实IP的必要功能配置。
在反向代理请求后端节点服务器的请求头中增加获取的客户端IP的字段信息,然后节点后端可以通过程序或者相关的配置接收X-Forwarded-For传过来的用户真实IP的信息。
[root@lb01 /application/nginx/conf]#vim /application/nginx/conf/nginx.conf
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream backend {
server 10.0.0.7:80 weight=1;
server 10.0.0.8:80 weight=1;
}
server {
listen 80;
server_name www.etiantian.org;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}
浏览器输入www.etiantian.org访问,web02的日志就会看到VMware8的ip
扩展:
server 10.0.0.8:80 weight=1 backup;#backup参数相当于负载均衡高可用了,做备份。
更多参数
由于参数众 多,最好把这些参数放到一个配置文件里,然后用include方式包含到虚拟主机配置里, 效果如下:
[root@lb01 /application/nginx/conf]#vim /application/nginx/conf/nginx.conf
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream backend {
server 10.0.0.7:80 weight=1;
server 10.0.0.8:80 weight=1;
}
server {
listen 80;
server_name www.etiantian.org;
location / {
proxy_pass http://backend;
include proxy.conf;
}
}
}
[root@lb01 /application/nginx/conf]# cat proxy.conf
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_connect_timeout 60;
定义与代理服务器建立连接的超时。请注意,此超时通常不能超过75秒。
proxy_send_timeout 60;
设置将请求传输到代理服务器的超时。超时仅在两个连续的写操作之间设置,而不用于整个请求的传输。如果代理服务器在此时间内未收到任何信息,则连接将关闭。
proxy_read_timeout 60;
定义用于从代理服务器读取响应的超时。超时仅在两次连续的读取操作之间设置,而不用于传输整个响应。如果代理服务器在此时间内未传输任何内容,则连接将关闭。
proxy_buffer_size 4k;
设置size用于读取从代理服务器接收到的响应的第一部分的缓冲区的。这部分通常包含一个小的响应头。默认情况下,缓冲区大小等于一个内存页。根据平台的不同,它可以是4K或8K。但是,它可以做得更小。
proxy_buffers 4 32k;
为单个连接设置用于从代理服务器读取响应的缓冲区的number和size。默认情况下,缓冲区大小等于一个内存页。根据平台的不同,它可以是4K或8K。
proxy_busy_buffers_size 64k;
当缓冲启用从代理的服务器响应,限制总size的缓冲区,可以是正忙于发送到客户端的响应,而响应尚不充分阅读的。同时,其余的缓冲区可用于读取响应,并在需要时将响应的一部分缓冲到临时文件中。默认情况下,size受限于proxy_buffer_size和proxy_buffers指令设置的两个缓冲区的大小 。
proxy_temp_file_write_size 64k;
size当启用了从代理服务器到临时文件的响应的缓冲时,一次 限制写入临时文件的数据的数量。默认情况下,size受proxy_buffer_size和proxy_buffers指令设置的两个缓冲区的限制 。临时文件的最大大小由proxy_max_temp_file_size指令设置 。