启动成功访问 服务器ip:80
注意:如何连接不上,检查安全组是否开放端口,或者服务器防火墙是否开放端口!
相关命令:
# 开启 service firewalld start # 重启 service firewalld restart # 关闭 service firewalld stop # 查看防火墙规则 firewall-cmd --list-all # 查询端口是否开放 firewall-cmd --query-port=8080/tcp # 开放80端口 firewall-cmd --permanent --add-port=80/tcp # 移除端口 firewall-cmd --permanent --remove-port=8080/tcp #重启防火墙(修改配置后要重启防火墙) firewall-cmd --reload # 参数解释 1、firwall-cmd:是Linux提供的操作firewall的一个工具; 2、--permanent:表示设置为持久; 3、--add-port:标识添加的端口;
Nginx配置之worker_processes
一般来说,worker_processes默认为1,官方说1一般情况足够了,也可以设置为cpu核心数,2或者4或者8再高没大意义,另外不要忘了设置worker_cpu_affinity,这个配置用于将worker process与指定cpu核绑定,降低由于多CPU核切换造成的寄存器等现场重建带来的性能损耗。
或者省事些,直接设置为auto,根据需求自动调整
1.9.10版本后可以配置
worker_processes auto; worker_cpu_affinity auto;
解释:0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,依此类推
配置参考:
worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000;
反向代理
server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; proxy_pass http://127.0.0.1:8080; index index.html index.htm; }
使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中
server { listen 9001; server_name 192.168.12.128; location ~ /edu/ { proxy_pass http://127.0.0.1:8080; } location ~ /vod/ { proxy_pass http://127.0.0.1:8081; } }
location 指令说明:
该指令用于匹配 URL。
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配
成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字
符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location
块中的正则 uri 和请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~ 标识。
负载均衡
upstream myserver { server 192.168.12.128:8080; server 192.168.12.128:8081; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; proxy_pass http://myserver; index index.html index.htm; }
nginx 分配服务器策略
第一种 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
第二种 weight
weight 代表权重默认为 1,权重越高被分配的客户端越多
第三种 ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器
第四种 fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分
动静分离
假设某些文件需要经常变更,可以通过设置 expires 起到控制页面缓存的作用,合理的配置缓存和压缩可以减少很多服务器的请求压力。
location /www/ { root /data/; index index.html index.htm; autoindex on; } location /image/ { root /data/; autoindex on; autoindex_exact_size off; autoindex_localtime on; }
Nginx默认是不允许列出整个目录的。如需此功能,打开nginx.conf文件,在location server 或 http段中加入
autoindex on;
另外两个参数最好也加上去:
autoindex_exact_size off;
默认为on,显示出文件的确切大小,单位是bytes。
改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime on;
默认为off,显示的文件时间为GMT时间。
改为on后,显示的文件时间为文件的服务器时间
高可用主备模式
(1)需要两台 nginx 服务器,在两台服务器安装 nginx
(2)需要 keepalived,在两台服务器安装 keepalived
(3)需要虚拟 ip
使用 yum 命令进行安装
yum install keepalived –y
安装之后, 有/etc/keepalived/keepalived.conf文件
修改/etc/keepalived/keepalivec.conf 配置文件,备份服务器注释带 * 号的地方注意更改。
global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.17.129 smtp_connect_timeout 30 router_id LVS_DEVEL # 访问到主机,也可以写ip,也可以修改/etc/hosts文件添加映射******** } 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 # 主、备机取不同的优先级,主机值较大,备份机值(90)较小 **** advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.17.50 // VRRP H 虚拟地址 } }
在/usr/local/src 添加检测脚本,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
把两台服务器上 nginx 和 keepalived 启动
启动 nginx:./nginx
启动 keepalived:systemctl start keepalived.service
最终测试
(1)在浏览器地址栏输入 虚拟 ip 地址 192.168.17.50
(2)把主服务器(192.168.17.129)nginx 和 keepalived 停止,再输入 192.168.17.50
测试可以发现我们访问 keepalived 中配置的两个 VIP 都可以正常调度等,当我们停止任意一台 keepalived节点,同样还是正常访问;到此,keepalived+nginx 高可用集群(双主模式)就搭建完成了。
原理
mater 和 worker
worker是如何工作的?
一个 master 和多个 woker 有好处
(1)可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作
(2)每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的,继续进行争抢,实现请求过程,不会造成服务中断
设置多少个 woker 合适
worker 数和服务器的 cpu 数相等是最为适宜的
查看CPU个数:cat /proc/cpuinfo |grep “cores”|uniq
或者:top命令后 按1
连接数 worker_connection
第一个:发送请求,占用了 woker 的几个连接数?
答案:2 或者 4 个,如果是静态资源 则一个请求 一个响应 连接数2
如果是动态资源 则客户端与nginx的请求响应(2) + nginx和tomcat的连接(2) = 4
第二个:nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的
最大并发数是多少?
普通的静态访问最大并发数是: worker_connections * worker_processes /2, 而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4。