共计 5209 个字符,预计需要花费 14 分钟才能阅读完成。
nginx 学习
- 反向代理
- 负载平衡
- 动静拆散
反向代理
正向代理 客户端通过代理服务器拜访网络 称之为正向代理
反向代理 通过反向代理服务器 转发到真正的服务器 能够暗藏实在服务器
负载平衡 客户端发送申请到反向代理服务器 反向代理服务器平均分配申请到多台服务器
动静拆散 把动静页面和动态页面离开进行部署
装置 nginx
sudo yum install epel-release
sudo yum install nginx
敞开防火墙
nginx 常用命令
ps -ef | grep nginx
查看 nginx 过程
nginx -v 查看版本号
nginx -s stop 敞开命令
nginx -s reload 重启命令
nginx 配置文件
配置文件由三局部组成
第一局部 全局块
从配置文件到 events 之间的内容
user nginx;
worker_processes auto; // 并发量
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
第二局部 events
nginx 反对的最大连接数 worker_connections 服务器与用户网络连接局部
events {worker_connections 1024;}
第三局部 大多数性能和配置 http 块
http {log_format main '$remote_addr - $remote_user [$time_local]"$request"''$status $body_bytes_sent "$http_referer" ''"$http_user_agent""$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / { }
error_page 404 /404.html;
location = /404.html { }
error_page 500 502 503 504 /50x.html;
location = /50x.html {}}
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2 default_server;
# listen [::]:443 ssl http2 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {#}
#
# error_page 404 /404.html;
# location = /404.html {#}
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {#}
# }
}
http 全局块
server 局部 和虚拟主机有密切关系 全局 server
nginx 配置实例 - 反向代理 tomcat
装置 tomcat 解压并 cd cd apache-tomcat-7.0.106/bin
执行 ./startup.sh 查看 tomcat 服务状态http://192.168.0.126:8080/
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name **192.168.0.126**;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {**proxy_pass http://127.0.0.1:8080;**}
error_page 404 /404.html;
location = /404.html { }
error_page 500 502 503 504 /50x.html;
location = /50x.html {}}
依据不同门路跳转不同 tomcat
(1)筹备两个 tomcat 一个是 8080 一个是 8081 cd /conf 批改 server.xml
(2)创立不同的页面 在 webapps 中退出文件 html
http://192.168.0.126:8081/vod/a.html
http://192.168.0.126:8080/edu/a.html
http://192.168.0.126:9001/edu/a.html
http://192.168.0.126:9001/vod/a.html
server {
listen 9001;
server_name 192.168.0.126;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location ~ /edu/ {proxy_pass http://127.0.0.1:8080;}
location ~ /vod/ {proxy_pass http://127.0.0.1:8081;}
error_page 404 /404.html;
location = /404.html { }
error_page 500 502 503 504 /50x.html;
location = /50x.html {}}
nginx 配置实例 负载平衡
(1)筹备两台 tomcat 端口别离为 8080 和 8081
(2)创立 edu 别离放入两个不同的 html
在 http 中加上服务列表
upstream myserver {
server 192.68.0.126:8080;
server 192.168.0.126:8081;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name 192.168.0.126;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {proxy_pass http://myserver;}
error_page 404 /404.html;
location = /404.html { }
error_page 500 502 503 504 /50x.html;
location = /50x.html {}}
nginx 调配策略
- 默认轮询
- 权重调配
upstream myserver {
server 192.68.0.126:8080 widget=1;
server 192.168.0.126:8081 widget=2;
}
- ip_hash 每个服务器拜访同一个服务 不存在 session 问题
upstream myserver {
ip_hash
server 192.68.0.126:8080 ;
server 192.168.0.126:8081;
}
- fair 依据申请工夫进行调配
nginx 配置实例 - 动静拆散
动静申请 动态申请 动态资源服务器 nginx 通过拆散动静申请到不同的服务器
一种形式是应用动静和动态服务器离开 一种是应用 nginx location 属性进行动静拆散
通过 expires 参数设置,能够设置浏览器缓存工夫。
创立 www 和 img 文件夹 use root
配置不同的拜访地址
location /www/ {
autoindex on;
root /root/home/data/;
}
location /img/ {
autoindex on;
root /root/home/data/;
}
nginx 高可用
通过两台 nginx 服务器 主从模式 keepalived 进行监控切换 虚构 ip
筹备工作
(1) 须要两个虚拟机环境 192.168.17.126 和 192.168.17.127
(2) 装置 nginx 在两台服务器中装置 keepalived 应用 yum 命令装置yum install keepalived -y
批改 /etc/keepalived/keepalived.conf 配置
keepalived 文件配置
在 /etc/hosts 中增加 127.0.0.1 LVS_DEVEL
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL // 服务器别名
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_http_port {
script "/etc/keepalived/nginx_check.sh"
interval 2
widget 2 //nginx 权重
}
vrrp_instance VI_1 {
state MASTER // 主服务
interface eth0
virtual_router_id 51 // 主备机 id 必须雷同
priority 100 // 优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {192.168.17.50}
}
ps aux ¦ grep nginx ¦ grep -v grep 2> /dev/null 1>&2 # 过滤 nginx 过程
if [[$? -eq 0]] # 如果过滤有 nginx 过程会返回 0 则认为 nginx 存活
then
sleep 5 # 使脚本进入休眠
else
# 如果 nginx 没有存活尝试启动 nginx, 如果失败则杀死 keepalived 的过程
/usr/sbin/nginx
ps aux ¦ grep nginx ¦ grep -v grep 2> /dev/null 1>&2
if [[$? -eq 0]]
then
pkill keepalived
fi
fi
nginx 原理解析
master 和 worker 过程 nginx 启动当前会有两个过程
worker 是如何进行工作的 多个 worker 来争抢工作
一个 master 和多个 worker 的长处
能够应用热部署 nginx -s reload
每个 worker 都是独立过程 不须要加锁 相互之间不会影响 并升高服务中断的危险
io 多路复用机制 worker 数个别和 cpu 数量最好是相等的
最大并发数 连接数 乘以 worker 数 除以 2 或者 4