nginx简介+基础使用+集群配置
一、nginx简介
- 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开源版:http://nginx.org/
- Nginx plus 商业版: https://www.nginx.com
- Openresty:http://openresty.org
- Tengine:http://tengine.taobao.org/
二、基础使用
1、目录结构
-
进入Nginx的主目录我们可以看到这些文件夹
client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp -
其中这几个文件夹在刚安装后是没有的,主要用来存放运行过程中的临时文件
client_body_temp fastcgi_temp proxy_temp scgi_temp -
conf: 用来存放配置文件相关
-
html: 用来存放静态文件的默认目录 html、css等
-
sbin: nginx的主程序
2、配置文件nginx.conf
-
完整最小配置
worker_processes 1; # 默认为1,表示开启一个业务进程 events { worker_connections 1024; # 单个业务进程可接受连接数 } http { include mime.types; # 引入http mime类型 default_type application/octet-stream; # 如果mime类型没匹配上,默认使用二进制流的方式传输。 sendfile on; # 使用linux的 sendfile(socket, file, len) 高效网络传输,也就是数据0拷贝 keepalive_timeout 65; server { listen 80; # 监听端口号 server_name localhost; # 主机名 location / { # 匹配路径 root html; # 文件根目录,访问页面存放在当前目录下 index index.html index.htm; # 默认页名称 } error_page 500 502 503 504 /50x.html; # 报错编码对应页面 location = /50x.html { root html; } } }
3、servername匹配规则
-
完整匹配
# 我们可以在同一servername中匹配多个域名,多个用空格隔开 server_name lyh.com www.lyh.com; -
通配符匹配
server_name *.lyh.com -
通配符结束匹配
server_name www.*; -
正则匹配
server_name ~^[0-9]+\.lyh\.com$;
4、location的前缀和匹配
location / {
proxy_pass http://lyh.com/;
# 只要有proxy_pass,后面的root和index无效
root html;
index index.html index.htm;
}
# location / 通用匹配,任何请求都会匹配到。
# location = 精准匹配,不是以指定模式开头
# location ~ 正则匹配,区分大小写
# location ~* 正则匹配,不区分大小写
# location ^~ 非正则匹配,匹配以指定模式开头的location
-
location匹配顺序
多个正则location直接按书写顺序匹配,成功后就不会继续往后面匹配
普通(非正则)location会一直往下,直到找到匹配度最高的(最大前缀匹配)
当普通location与正则location同时存在,如果正则匹配成功,则不会再执行普通匹配
所有类型location存在时,“=”匹配 > “^~”匹配 > 正则匹配 > 普通(最大前缀匹配)
5、alias与root
location /css {
alias /usr/local/nginx/static/css;
index index.html index.htm;
}
1)alias指定的目录是准确的,即location匹配访问的path目录下的文件直接是在alias目录下查找的;
2)root指定的目录是location匹配访问的path目录的上一级目录,这个path目录一定要是真实存在root指定目录下的;
3)使用alias标签的目录块中不能使用rewrite的break(具体原因不明);另外,alias指定的目录后面必须要加上"/"符号!!
4)alias虚拟目录配置中,location匹配的path目录如果后面不带"/“,那么访问的url地址中这个path目录后面加不加”/“不影响访问,访问时它会自动加上”/“; 但是如果location匹配的path目录后面加上”/“,那么访问的url地址中这个path目录必须要加上”/“,访问时它不会自动加上”/“。如果不加上”/",访问就会失败!
5)root目录配置中,location匹配的path目录后面带不带"/",都不会影响访问。
5、正向代理和反向代理区别:
- 正向代理:代理的是客户端
- 反向代理:代理的是服务端
6、 负载均衡策略
-
轮询
默认情况下使用轮询方式,逐一转发,这种方式适用于无状态请求。
-
weight(权重)
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream httpd { server 127.0.0.1:8001 weight=10 down; server 127.0.0.1:8002 weight=1; server 127.0.0.1:8003 weight=1 backup; } # down:表示当前的server暂时不参与负载。(相当于宕机了) # weight:默认为1.weight越大,负载的权重就越大。 # backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。(相当于备胎) -
ip_hash
根据客户端的ip地址转发同一台服务器,可以保持会话。
-
least_conn
最少连接访问
-
url_hash
根据用户访问的url定向转发请求(定向流量转发)(需要第三方插件)
-
fair
根据后端服务器响应时间转发请求(需要第三方插件)
7、前后端分离nginx.conf配置
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream gateway {
server 192.168.10.106:80;
}
server {
listen 80;
server_name localhost;
charset utf-8;
# 前端
location / {
root html/dist;
index index.html index.htm;
}
# 后端
location /api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_pass http://localhost:8080/;
proxy_pass http://gateway;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
三、高可用配置(集群配置)
准备两台装有nginx的服务器
1、安装Keepalived
-
离线安装:
-
tar包下载地址:https://www.keepalived.org/download.html#
-
使用 ./configure 编译安装
-
如遇下面报错提示
configure: error: !!! OpenSSL is not properly installed on your system. !!! !!! Can not include OpenSSL headers files. !!!安装依赖:yum install openssl-devel
-
-
在线安装:
yum install -y keepalived rpm -q -a keepalived #查看是否已经安装上 systemctl start keepalived #启动 systemctl status keepalived #状态 systemctl stop keepalived #停止
2、nginx_check.sh脚本
该脚本文件的作用是,探测nginx进程是否存在,如果不存在,则尝试启动nginx,启动不成功后,则停止keepalived服务,让服务切换到备份服务器。
#! /bin/bash
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ];then
/usr/local/nginx/sbin/nginx # 以上作用:如果进程没有nginx,则启动nginx
sleep 2
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ];then
killall keepalived # 以上作用:如果进程没有nginx,则停止keepalived
fi
fi
3、修改配置文件
使用yum安装后配置文件在:/etc/keepalived/keepalived.conf
- 第一台(master):192.168.10.200
! Configuration File for keepalived
global_defs {
router_id lb200 # 设备标识
script_user root # 赋予检测脚本的权限
enable_script_security
}
vrrp_script chk_nginx {
script "/usr/local/src/nginx_check.sh"
interval 2 # (检测脚本执行的间隔)2s
weight 2 # 权重,如果这个脚本检测为真,服务器权重+2
}
vrrp_instance lyh { # 主、备机的vrrp_instance必须相同
state MASTER # 主 master
interface ens33 # 对应服务器网卡
virtual_router_id 51 # 主、备机的virtual_router_id必须相同
priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 # 每隔1s发送一次心跳
authentication { # 校验方式, 类型是密码,密码1111 ,主、备机必须相同
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.202 # 虛拟ip
}
track_script {
chk_nginx
}
}
- 第二台(backup):192.168.10.201
! Configuration File for keepalived
global_defs {
router_id lb201
}
vrrp_instance lyh {
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.202
}
}
两台服务器的虚拟地址:192.168.10.202
更多推荐



所有评论(0)