Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。
正向代理:。。。。
反向代理:客户端对代理是无感知的,发送请求到反向代理服务器,反向代理服务器暴漏端口,真实服务器不对外暴露端口,反向代理服务器去访问真是服务器,再对外返回数据
负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡*(Load Balance)*其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
客户端发送多个请求到服务器,nginx反向代理服务器负载均衡的发送个服务器,不写默认分配规则是轮询,还有weight(权重),IPhash,fair方式。
将动态资源(jsp,servlet)和静态资源(HTML,css,图片等)进行分离,交给不同服务器处理,静态资源由静态资源服务器负责,有效降低服务器的压力。
前往官网,nginx官网下载地址,此处使用1.16.1,最新稳定版
先安装相关依赖:一般nginx的安装需要准备pcre-8.34.tar.gz包(支持正则表达式)、openssl-1.0.1p.tar.gz包(支持安全协议站点)、zlib-1.2.8.tar.gz包(依赖包)
yum -y install gcc 安装gcc,编译依赖gcc环境,已存在可跳过
yum install -y pcre pcre-devel 安装.pcre、pcre-devel,安装nginx需要此库,已存在可跳过
yum install -y zlib zlib-devel nginx使用zlib对http包的内容进行gzip,已存在可跳过
yum install -y openssl openssl-devel openssl安装,,已存在可跳过
安装:没下载压缩包的也可以使用wget命令下载
wget http://nginx.org/download/nginx-1.16.1.tar.gz 下载nginx压缩包
tar -zxvf nginx-1.16.1.tar.gz 解压缩
cd nginx-1.16.1 进入压缩目录
./configure 配置属性
make && make install 编译、安装
cd /usr/local 进入此目录发现多个nginx文件夹
[root@centos7-2 nginx]# cd /usr/local/nginx/
[root@centos7-2 nginx]# ls
conf html logs sbin
启用命令在sbin里
cd /usr/local/nginx 进入安装目录,默认安装到此目录
cd sbin 进入sbin目录
./nginx 启动nginx,浏览器直接输入ip 出现Nginx欢迎页安装完成
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
/etc/rc.d/init.d/iptables save
启用成功
[root@centos7-2 sbin]# ./nginx
[root@centos7-2 sbin]# ps -ef |grep nginx
root 4446 1 0 00:33 ? 00:00:00 nginx: master process ./nginx
nobody 4447 4446 0 00:33 ? 00:00:00 nginx: worker process
root 4449 1335 0 00:33 pts/0 00:00:00 grep --color=auto nginx
如果访问不到记得关闭防火墙,或者添加一个开放80端口的规则.
firewall-cmd --list-all 查看端口开发情况
sudo firewall-cmd --add-port=80/tcp --permanent 添加80端口开放
firewall-cmd --reload 重启防火墙
进入安装目录下的 sbin 目录运行, 默认地址:cd /usr/local/nginx/sbin
./nginx -h 查看帮助信息
./nginx -v 查看Nginx版本
./nginx 启动 Nginx || start nginx
./nginx -s stop 停用 Nginx
./nginx -s quit 优雅的停用Nginx(处理完正在进行中请求后停用)
./nginx -s reload 重新加载配置,并优雅的重启进程
./nginx -s reopen 重启日志文件
配置文件位置 /usr/local/nginx/config/nginx.conf
通过nginx -c 可以指定要读取的配置文件来启动
总体三部分组成:全局块、events块、Http块
浏览器输入www.123.com.跳转至tomcat主页,准备jdk和tomcat略;
1.在host文件中添加一个域名映射,将www.123.com对应自己的Linux的IP地址
C:\Windows\System32\drivers\etc\hosts最后一行加入
192.168.229.129 www.123.com
2.进行反向代理配置
server {
listen 80;
# 将server——name值localhost 改为IP地址
server_name 192.168.229.129;
#access_log logs/host.access.log main;
location / {
root html;
#加入一个转发路径,是本机的8080
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
访问http:127.0.0.1:9001/edu/ 去127.0.0.1:8080
访问http:127.0.0.1:9001/vod/ 去127.0.0.1:8081
准备工作:两个tomcat,一个8080,一个8081(修改server.xml文件,具体略),8080的tomcat在webapps内创建edu文件夹,里边写个a.html,8081的tomcat在webapps内创建dev文件夹,里边写个a.html,然后启动。a.html要容易区分。
修改nginx配置文件
再加一组server
server {
listen 9001;
server_name 192.168.229.129;
#正则表达式
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /dev/{
proxy_pass http://127.0.0.1:8081;
}
}
然后启动nginx,再分别访问访问http:127.0.0.1:9001/edu/a.html http:127.0.0.1:9001/dev/a.html
通过浏览器输入http://192.168.229.129/edu/a.html,负载均衡访问两个Tomcat服务器。
准备:两个tomcat,分别8080和8081,都在web apps下创建/edu文件夹,写a.html文件,为了区别两个a.html依旧不同
配置
http{
# Http配置块中加
upstream myserver{
server 192.168.229.129:8080;
server 192.168.229.129:8081;
}
server {
#server块中加
listen 80;
server_name 192.168.229.129;
location / {
root html;
proxy_pass http://myserver;
index index.html index.htm;
}
不断访问http://192.168.229.129/edu/a.html发现默认是轮询规则,
#1.ip_hash;根据IP的hash值来,这个IP只访问对应的服务器,能够解决session共享问题
ip_hash;
server 192.168.229.130:8080
#2.weight=1;//负载均衡的IP+端口+权重
server 192.168.229.130:8081 weight=1;
#3.fair;//fair方式,根据后端服务器响应时间分配
fair;
准备静态资源用于访问;在根下创建一个datas文件夹,里边在创建www和img文件夹,里边再创建两个文件,再分别访问。
location /www/ {
root /datas/;
}
location /img/ {
root /datas/ ;
#显示列表
autoindex on;
}
分别访问ip+/www/文件名,ip+/img/文件名,ip+/www/和IP+/img/,会发现有autoindex on;的会有列表。
Nginx可能会宕机,所以高可用集群很重要。
主备模式:nginx1主服务器master,nginx2 从服务器backup
使用keepalived ,使用一个虚拟IP绑定。
准备:两个nginx服务器,两个tomcat,一个虚拟ip,两台服务器都要装keepalived
1.安装keepactived 最终配置文件keepalived.conf在 /etc/keepaclived中
yum -y install keepalived
rpm -qa keepalived 查看安装情况
keepalived-1.3.5-16.el7.x86_64
2.更改keepalived.conf
! Configuration File for keepalived
#全局配置
global_defs {
notification_email {
[email protected]
}
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL #通过它访问主机,/etc/hosts 127.0.0.1 LVS_DEVEL
}
#检测脚本,检查
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
intercal 2 #脚本检测间隔
weight -20 #权重
}
#虚拟网址配置
vrrp_instance VI_1 {
state BACKUP #主服务器是 MASTER 备份服务器是BACKUP
interface ens33 #网卡
virtual_router_id 51 #主机备机必须相同
priority 100 # 主备机优先级
advert_int 1 #每隔一秒发送一次心跳
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 #虚拟IP
}
}
#检测脚本文件
#!/bin/bash
A=`ps -C nginx ¨Cno-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
分别启动两台服务器nginx和keepalived.service
systemctl start keepalived.service
通过虚拟IP测试,
# user 指定运行 nginx 的用户和组(第一个参数为用户第二个为组,这里只有用户)
#user nobody;
# 指定工作进程数(一般设置为CPU核数)
worker_processes 1;
# 指定错误日志为 logs/ 目录下的 error.log 文件
#error_log logs/error.log;
# 指定错误日志,并指定写入格式为 notice
#error_log logs/error.log notice;
# 指定错误日志,并指定写入格式为 info
#error_log logs/error.log info;
# 指定 pid 文件(存放主进程 pid 号)
#pid logs/nginx.pid;
# nginx 连接配置模块
events {
# 指定每个工作进程最大连接数为 1024
worker_connections 1024;
}
# http 配置模块
http {
# 通过 include 加载 mime.types 文件,里面的 types {} 模块将文件扩展名映射到响应的 MIME 类型
include mime.types;
# 定义响应的默认 MIME 类型
default_type application/octet-stream;
# 写入格式 main 的内容格式如下
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
# 指定访问日志和写入格式为 main
#access_log logs/access.log main;
# 启用或者禁用 sendfile()
sendfile on;
# 启用或者禁用使用套接字选项(仅在 sendfile 使用时使用)
#tcp_nopush on;
# 0 值禁用保持活动的客户端连接
#keepalive_timeout 0;
# 65 s 超时
keepalive_timeout 65;
# 启用或者禁用 gzip
#gzip on;
# 虚拟主机配置模块
server {
# 监听 80 端口
listen 80;
# 监听域名为 localhost
server_name localhost;
# 将指定的 charset 添加到 “Content-Type” 响应头字段。如果此charset与source_charset指令中指定的charset不同,则执行转换。
#charset koi8-r;
# 指定该虚拟主机的访问日志
#access_log logs/host.access.log main;
# 将特定的文件或目录重新定位,如 php 文件,image 目录等
location / {
# 设置请求的根目录
root html;
# 定义索引,按顺序匹配
index index.html index.htm;
}
# 定义显示 404 错误的 uri
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
# location 精准匹配 '/50x.html'
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
# 正则表达式匹配 php 文件
#location ~ \.php$ {
# 设置代理服务器的协议和地址,以及应该映射位置的可选URI。作为协议,可以指定“http”或“https”。该地址可以指定为一个域名或IP地址,以及一个可选端口
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# 设置 FastCGI 服务器的地址。地址可以指定为一个域名或 IP 地址,以及一个端口
# fastcgi_pass 127.0.0.1:9000;
# 设置将在以斜杠结尾的URI之后追加的文件名,
# fastcgi_index index.php;
# 设置一个应该传递给FastCGI服务器的参数。
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# 加载 conf/fastcgi_params 文件
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
# ssl 配置,要启用 ssl 模块需要在编译 nginx 时加上 --with-http_ssl_module 参数
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}