Nginx (engine x) 是一个高性能的http和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
安装Nginx:
Nginx还需要依赖pure,zlib,openssl,
解压文件后进入目录启动 ./configure , 然后安装 : make && make install
nginx会在 usr/local/下生成一个nginx文件夹,进入后有一个sbin,里面就是nginx的启动文件 , 通过./nginx就能启动
nginx操作的常用命令
1.需要进入/usr/local/sbin下
查看版本号:./nginx -v
启动nginx: ./nginx 查看端口情况 ps -ef | grep nginx
关闭nginx: ./nginx -s stop
修改配置文件后重加载:./nginx -s reload
配置文件
位置:usr/local/nginx/conf/nginx.conf
组成部分:1>全局块:设置一些影响nginx服务整体运行的配置指令 , 如worker_process,值越大,处理并发量越多
2>events块:配置服务器与有湖网络连接部分,如worker_connections 1024 , 支持最大连接数
3>http块:配置最频繁的部分,反向代理,负载哦,动静又分为两部分:
1,server块 : listen 80 :监听端口,
2,location块:
配置反向代理
使用nginx反向代理,根据访问的路径跳转到不同端口的服务中,设置nginx的监听端口为9001
实现效果:
访问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 ,
在webapps 下创建两个文件夹edu(8080.html),vod(8081.html),
在nginx.conf中配置
1,监听端口:listen:9001
2, server_name: ip地址(我这里用本地127.0.0.1)
3 , 配置转发路径:
server { listen 9001; server_name 127.0.0.1; location ~/edu/ { proxy_pass http://127.0.0.1:8080 } location ~/vod/ { proxy_pass http://127.0.0.1:8081 } }= : 用于不含正则表达式的url,要求请求字符串与url严格匹配,~ :用于表示url包含正则表达式,区分大小写~* :不区分大小写
windows系统访问linux系统中的Nginx,默认不能访问,因为防火墙问题
解决办法:1.关闭防火墙,2.开放访问的端口
命令:
查看开放的端口:firewall-cmd --list-all
设置开放端口:firewall-cmd --add-service=http --permanent
firewall-cmd --add-port=端口号/tcp --permanent
重启防火墙:firewall-cmd --reload
结果:
配置负载均衡
通过增加服务器的数量,然后将请求分发到各个服务器上
实现效果:浏览器输入 http://127.0.0.1/edu/edu.html ,nginx将请求均衡到8080和8081
准备工作:两台tomcat服务器,一台8080,一台8081
在两个tomcat的webapps目录中创建edu文件,在edu下创建edu.html文件
nginx.conf配置
upstream myserver { //myserver为服务名,自己指定 server 127.0.0.1:8080; 需要负载到的服务器列表 server 127.0.0.1:8081; } server { listen 80; //nginx监听端口 server_name 127.0.0.1; location / { proxy_pass http://myserver; //加上自己定义的服务名 root html; index index.html index.htm; }
测试结果:80,81交替服务,实现了负载均衡
负载均衡策略:
一:轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后段服务器挂掉,能自动剔除
二:weight(权重策略):默认为1,权重越高被分配的客户端就越多,
upstream myserver { server 127.0.0.1:8080 weight=10; server 127.0.0.1:8081 weight=5; }
三:ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个服务器,可以解决session共享问题,如第一次访问的是8080,以后用同一ip访问,也都是走8080端口
upstream myserver { ip_hash; server 127.0.0.1:8080; server 127.0.0.1:8081; }
四:fair分配:根据后端响应时间来分配,时间越短的优先分配
upstream myserver { fair; server 127.0.0.1:8080; server 127.0.0.1:8081; }
Nginx动静分离
将动态资源(servlet.jsp.访问数据库等)和静态资源(html,css,image等)分离,提高访问效率
两种方案:
1:将静态文件独立成单独的域名,放在独立的服务器,也是目前主流方案
2:动态和静态文件混合一起发布,通过nginx来分开,
准备工作:
1.在linux系统中准备一些静态资源,在根目录下建一个data文件夹,里面方图片和html
配置nginx.conf
server { listen 80; server_name 127.0.0.1; location /www/ { //html文件路径 root /data/; index index.html index.htm; } location /image/ { //图片路径 root /data/; autoindex on; //列出目录 } }
结果:
Nginx高可用
简单来说就是当主服务器宕机时能够服务转移到从服务器
准备工作:
1.两台服务器
2.两台服务器都安装nginx
3.两台服务器都安装keepalived(切换作用),安装位置在 /etc/keepalived/keepalived.conf
高可用的配置(修改keeepalived.conf):
1keeepalived.conf主要三个部分:
(1):global_defs:全局配置
里面最重要的是:router_id 主机名 //作用是访问到主机
(2):vrrp_script chk_http_port:脚本配置
script 脚本文件地址 //脚本文件的地址,具体内容在底下
interval 2 //检测脚本执行的时间,这里是每2秒执行一次
weight 20 //权重
(3): vrrp_instance VI_1 : 虚拟主机配置
state MASTER //设置是主服务器还是从服务器,这里是主
interface ens33 //网卡,这里网卡是ens33,可通过ifconfig命令查看
virtual_router_id 88 //主从服务器的id标识,两个必须相同
priority 100 //主从服务器的优先级,一般主机较大,从机较小
advert_int 1 //检测心跳,就是多久检测以下这台主机是否还活着,这里设置为1秒
authentication{ //权限验证
auth_type PASS
auth_pass 111
}
virtual_ipaddress {
虚拟ip地址 //绑定虚拟ip,可以绑定多个
}
脚本文件内容:
#!/bin/bash A=`ps -C nginx –no-header |wc -l` if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx //启动nginx的位置 sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi