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 {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
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