nginx学习总结(一)
2,nginx安装、常用命令和配置文件:/
在linux系统中安装nginx,需要依赖(pcre、opensll、zlib)
1,安装pcre
wget /project/pcre/pcre/8.37/pcre-8.
解压文件:.configure 完成后,回到 pcre目录下执行 make
在执行 make && make install
安装之后,pcre-config --version
2,安装openssl
3,安装zlib
yum -y install make zlib zlib-devel gcc-c++libtool openssl-devel
4,安装nginx
下载 nginx后,进行解压 tar -xvf
执行 ./configure
最后执行 make && make install
安装完成后在 usr 多出来一个文件夹 local/nginx,在sbin有启动脚本
在sbin目录下执行 ./nginx
查看 nginx状态 ps -ef|grep nginx
5,设置防火墙
查看开放的端口号:firewall-cmd --list-all
设置开放的端口号:
firewall-cmd --add-service=http -permanent
firewall-cmd --add-port=8080/tcp --permanent
重启防火墙:firewall-cmd --reload
nginx常用命令
nginx的命令操作必须进入到 /usr/local/nginx/sbin目录(默认安装路径)
查看nginx版本:./nginx -v
关闭nginx:./nginx -s stop
启动nginx:./nginx
重新加载:./nginx -s reload
nginx配置文件
nginx由三部分组成
全局块:从配置文件到 events 块之间的内容,主要设置一些影响服务器整体运行的配置指令。
主要包括 配置运行 Nginx服务器的用户(组)、允许生成的worker process数,进程ID存放路径、日志存放路径和类型以及配置文件的引入等。
worker_processes 1;#表示可以支持的并发处理数,值越大处理的并发数越多,但受到硬件、软件等设备制约
events块:主要影响Nginx服务器与用户网络连接,常用的设置包括是否开启对多 work process下的网路连接进行序列化,是否允许同时接收多个网络
连接,选取哪种事件驱动模型来处理连接请求,每个word process可以同时支持的最大连接数等。主要是配置性能优化相关
http块:包括 http全局块、server块
3,nginx配置实例
反向代理:
一,简单请求
1,如果是本地 windows电脑,想要通过 域名 映射到 ip:8080端口上,需要修改 hosts文件,增加一行 ip 进行映射
2,在 中修改 http-server块
server {
listen 80; #监听的端口,一般不用改
server_name ip; #表示nginx所在的服务器 ip
# 表示当请求 nginx对应的ip:端口 时,进行转化的路由规则设置
location /{
root html;# 页面根路径
proxy_pass http://实际服务ip:端口; #实际转发到的地址
index ;# 请求的入口页面
}
}
3,请求 ip:80 会路由转发到 proxy_pass 对应的实际地址
二,不同请求转发到不同服务器
访问 http://192.168.11.2:9001/edu 转发到 193.132.3.2:8080
访问 http://192.168.11.2:9001/vod 转发到 193.132.3.3:8081
server{
listen 9001;
server_name 192.168.11.2;
location ~ /edu/{
proxy_pass http://193.132.3.2:8080;
}
location ~ /vod/{
proxy_pass http://193.132.3.3:8081;
}
}
关于location 后不同符号表示的含义:= ~ ~* ^~
=:用于不含正则表达式的 uri 前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求
~: 用于表示uri 包含正则表达式,并且区分大小写
~*: 用于表示uri包含正则表达式,并且不区分大小写
^~: 用于不含正则表达式的uri前,要求 nginx服务器找到标识uri和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location
块中的正则 uri和请求字符串做匹配
配置完成后需要开放对应端口号 如 9001
注:配置中允许存在多个 server块配置
负载均衡
一,简单的请求nginx的某个地址,路由到两台机器节点上,请求一次到A,在请求一次到B节点
http{
upstream myserver{
# 轮询方式
server 193.132.3.2:8080;
server 193.132.3.3:8081;
或
# 权重 权重越高被分配的请求数越多
server 193.132.3.2:8080 weight=5;
server 193.132.3.3:8081 weight=10;
# hash方式 客户的ip为A,请求到的服务器为 1,则后续会一直分配到服务器1
ip_hash;
server 193.132.3.2:8080;
server 193.132.3.3:8081;
# fair 按照后端服务器的响应时间来分配,响应时间短的优先分配
server 193.132.3.2:8080;
server 193.132.3.3:8081;
fair;
}
}
server{
listen 9001;
server_name 192.168.11.2;
location /{
proxy_pass http://myserver; #实际转发到的地址
root html;# 页面根路径
index ;# 请求的入口页面
}
}
动静分离
一般使用 location 结合 expires参数(给一个资源设定一个过期时间,时间范围以内的则直接取nginx上的静态资源,否则从服务器上动态获取)
如 3d表示3天
一般错误码 304表示 超过过期时间后,从服务器抓取失败
location /www/ {
root /data/;
index ;
}
location /image/ {
root /data/;
autoindex on; # 表示列出当前文件夹内所有文件,可以访问image目录,也可以指定目录里面的某个文件继续访问
}
最终访问:
http://192.168.11.2/image/ 或者访问指定文件 http://192.168.11.2/image/
http://192.168.11.2/www/
6,nginx配置高可用集群
一,准备工作
1,准备两台机器(或多台机器)
2,每台机器上安装nginx
3,每台机器上安装 keepalived
yum install keepalived -y
rpm -q -a keepalived # 检查是否安装成功
安装之后在 etc下生成 keepalived目录,该目录下有 文件
二,主从配置
主服务器配置
global_defs{
notification_email{
acassen@
failover@
sysadmin@
}
notification_email_from @
smtp_server 192.168.17.29
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port{
script "/usr/local/src/nginx_check.sh"
interval 2 #检测脚本执行的间隔
weight 2
}
vrrp_instance_VI_1{
state MASTER #备份服务器上将 MASTER改为 BACKUP
interface ens33 #网卡 可通过在服务器上输入 ifconfig查看具体的网卡值
virtual_router_id 51 #主、备机的virtual_router_id必须相同
priority 100 #主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication{
auth_type PASS
auth_pass 1111
}
virtual_ipaddress{
192.168.17.50 //VRRP-H虚拟地址
}
}
nginx_check.sh文件内容
#!/bin/bash
A=`ps -C nginx -no-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
从服务器配置
global_defs{
notification_email{
acassen@
failover@
sysadmin@
}
notification_email_from @
smtp_server 192.168.17.29
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port{
script "/usr/local/src/nginx_check.sh"
interval 2 #检测脚本执行的间隔
weight 2
}
vrrp_instance_VI_1{
state BACKUP #备份服务器上将 MASTER改为 BACKUP
interface ens33 #网卡 可通过在服务器上输入 ifconfig查看具体的网卡值
virtual_router_id 51 #主、备机的virtual_router_id必须相同
priority 90 #主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication{
auth_type PASS
auth_pass 1111
}
virtual_ipaddress{
192.168.17.50 //VRRP-H虚拟地址
}
}
在启动完nginx后启动keepalived:system start
最后访问虚拟地址 http://192.168.17.50 可以访问成功nginx默认页面
停止keepalived:systemctl stop
7,nginx原理
1,master和worker进程
master进程拿到任务后,进行管理监控所有worker及任务
任务一出来,所有worker进程争抢,然后通过tomcat进行处理
2,worker如何工作
每个worker间独立,相互之间没有联系
3,设置多少个worker合适
采用io多路复用机制,每个worker独立进程,worker数与cpu核数相同时最优
4,worker连接数 worker_connection
发送请求,worker占用 2个连接数 或者 4个连接数
支持的最大并发数计算:worker_connection * worker_process / 2 或者 worker_connection * worker_process / 4