Nginx 反向代理服务器
Linux 上nginx安装
1,pcre依赖
- 下载pcre, tar 解压,cd 到目录,./configure, make&&make install编译安装, pcre --version检查安装版本
2,zlib依赖
3,nginx
- 安装:
下载,tar解压,cd到目录,./configure,make&&meke install, nginx --version
- 启动:
cd /usr/local/nginx/sbin &&./nginx
- 检查启动:
ps -ef | grep nginx
- 配置文件:
vim nginx/conf/nginx.conf
- listen 80:默认80端口 #例访问nginx:192.168.17.129
- 查看防火墙开放端口:
firewall-cmd --list-all
- 给防火墙把nginx访问端口开放
- 添加开发端口:
sudo firewall-cmd --add-port=80/tcp --permanet
- 重启防火墙:
firewall-cmd restart
4 nginx常用命令
- 使用命令需要进入nginx目录
- 查看v:
./nginx -v
- 启动:
./nginx
- 关闭:
./nginx -s stop
- 配置文件重加载:
./nginx -s reload
5 nginx 配置文件
- 位置:vim /usr/local/nginx/nginx.conf
- 三部分组成:1,全局块,2,events块,http块
- 1,
全局块
:从配置文件开始到events之间内容,设置影响nginx整体运行的配置指令,主要包括配置运行Nginx服务器的用户(组),允许生成worker process 数,进程PID存放路径,日志存放路径和类型以及配置文件的引入等
- 2,
ecents块
:涉及Nginx 与用户的网络连接
- 3,
http 全局块(重点)
:包含两部分→http块,server块
- 1,http
- 2,server
- listen:监听当前主机端口号
- server_name:主机名
- location /:请求跳转
5 nginx反向代理配置
- 目的:打开浏览器,输入url,直接跳转到linux tomcat主页面
- 准备工作:tomcat
- 解压tomcate:cd bin/目录, ./startup.sh启动
- 对外开发访问端口:
firewall-cmd -add-port=8080/tcp -permannet
- 查看开发端口:
firewall-cmd --list-all
是否有楼上的端口 - window访问tomcate
5.1 Nginx反向代理配置1
- windows系统host文件进行域名和ip对应关系的配置
- win host文件默认位置: C:Windows//System32//drivers/etc/
HOSTS
- win host添加: 服务器
IP地址
(例:192.168.17.129)和域名
(例:www.123.com) - ** nginx请求转发配置:**
- server:
- 修改server_name为服务器IP地址 192.168.17.129:80
- location /{}中添加转发路径:
proxy_pass http://127.0.0.1:8080
(如果访问的是192.168.17.129:80 就会转发到127.0.0.1:8080);保存退出 并加载配置文件,启动nginx - 以上的80,8080端口都要对外开发
5.1 反向代理配置2(跳转多个)
配置nginx.conf
- 增加一个server
- 修改监听端口:服务器监听端口
- 修改server_name:用户请求的服务器地址
- 正则写法:例:
`local ~/edu/ { proxy_pass http://127.0.0.1:8081;}
-
- 1,
=
:不含正则uri前,要求字符串与uri严格匹配,如果匹配成功,停止继续向下搜索,并立即处理该请求 - 2,
~
:用户uri包含正则表达式,并区分大小写 - 3,
~*
:用户uri包含正则表达式,并不区分大小写 - 4,
^~
:用户不包含正则表达式uri前,要求Nginx服务器找到表示uri 和请求字符传匹配度最高的 location 后,立即使用此 localtion 处理请求, 而不适用localtion 块中的正则 uri 和请求字符串做匹配 - 注意:
如果uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。
- 开发服务器对外访问端口号
- 重加载nginx || 重启
6,nginx 负载均衡
6.1 nginx.conf配置
upstream myserver {
server 192.168.17.129:8080
server 191.168.17.129:8080}
- server块加规则请求分配:
例:
修改server_name为被请求服务器ip:192.168.17.129
location / {
proxy_pass http://myserver
}
6.2 分配策略
- 轮询(默认): 每个请求按时间顺序逐一分配到不同的后端服务器,如果服务器宕机了,能自动剔除
- weight(权重): 权重默认为1,权重越高被分配的客户端越多
upstreat myserver {
server 192.168.17.129:8080 weight=5;
server 192.168.17.129:8081 weight=10;
}
- ip_hash: 每个请求按访问ip 的hash 结果分配,这样每个访问固定访问一个后端服务器,可以决议解决session共享 的问题。例:
upstream server_pool{
ip_hash
server 192.168.5.21:80
server 192.168.5.22:80
}
- fair(第三方): 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream server_pool{
server 192.168.5.21:80
server 192.168.5.22:80
fair
}
7 nginx动静分离
7.1 nginx配置
server {
listen 80;
server_name 192..168.17.129;
location /www/ {
root /data/;
index index.html index.htm;
}
location /www/ {
root /data/;
autoindex on;
}
}
- 测试:http://192.168.17.129/image/o1.jpg
8.nginx高可用集群
- 防止 nginx宕机/使用备份服务器完成请求
- keepalived :路由作用,通过绑定虚拟ip 访问
8.1 服务器配置
- keepalived安装:yum install keepalived -y
- 安装之后,在etc 里面生成目录keepalived, keeplaived.conf
8.2 nginx高可用配置实例
- vim keepalived.conf
- 查询网卡:ipconfig
- 查看服务器名:vim /etc/host 添加有一个主机名 例:127.0.0.1 LVS_DEVELBACK
- 一下配置好后放到conf
global_defs{
router_id LVS_DEVELBACK
}
vrrp_script chk_http_port{
script "/usr/local/src/nginx_check.sh"
interval 2
weight 2
}
vrrp_instance_VI_1{
state MASTER
interface ens33 //
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 // VRRP H
}
}
A='ps -C nginx -no-header | wc -1'
if [$A -eq 0];then
/usr/local/nginx/sbin/nginx
sleep 2
if ['ps -C nginx -no-header | wc -1' -eq 0];then
killall keepalived
fi
fi
- 修改/etc/keepalived/keepalived.conf
- 在/usr/local/src 添加检测脚本
- 启动nginx ,keepalived
- ./nginx
- systemctl start keepalived.service
- 输入虚拟IP测试能否访问nginx
- 停止主服务器测试备份服务器访问
nginx原理解析
- nginx内两个进程:
master / worker(可多个)
- master/worker 工作解析:client发送请求到nginx中,master得到请求并发给worker(worder采用争抢机制)
- 一个master,多个woder好处:
1,
利于热部署,可以使用 nginx -s reload 热加载 ,2
每个worker是一个独立的进程,如果其中一个出现问题,还可以继续争抢处理请求 - 设置worker进程数量合适:worker和服务器cpu 数量相等为适宜
- worker连接数 worker_connection:发送一个请求占用worker 2个或者4个(发送请求访问静态资源,返回请求使用两个worker,而动态资源4个),每个worker支持最大连接数1024,支持最大并发数请求为→worker数 *1024/worker数