Nginx 学习(三).Nginx 实践
本章节 主机Windows
虚拟机192.168.141.131
1. 多虚拟站点
1.1 前期准备工作
Windows主机:hosts 文件修改,模拟域名解析;
## 学习nginx
192.168.141.131 www.nginx.com
192.168.141.131 aaa.nginx.com
192.168.141.131 bbb.nginx.com
192.168.141.131 ccc.nginx.com
192.168.141.131 ddd.nginx.com
192.168.141.131 eee.nginx.com
Linux 虚拟机 : 创建目录 /website
[root@localhost website]
/website
[root@localhost website]
aaa bbb ccc
[root@localhost website]
[root@localhost aaa]
index.html
[root@localhost aaa]
<h1>AAA website<h1>
2. 多端口测试
一个server 表示一个虚拟主机
配置文件
server {
listen 80;
server_name localhost;
location / {
root /website/aaa;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 81;
server_name localhost;
location / {
root /website/bbb;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 82;
server_name localhost;
location / {
root /website/ccc;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
效果
3. 多域名测试
配置文件
server {
listen 80;
server_name aaa.nginx.com;
location / {
root /website/aaa;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name bbb.nginx.com;
location / {
root /website/bbb;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name ccc.nginx.com;
location / {
root /website/ccc;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
效果
4. 虚拟主机 server
一个server 表示一个虚拟主机:解析配置文件
- 多个server ,安装顺序匹配,匹配到第一个 后续就不匹配了
- listen + server_name 虚拟主机唯一性
- server_name: bbb.nginx.com ddd.nginx.com eee.nginx.com; 可以配置多个域名
- server_name: 域名可以是通配符
*.nginx.* ; - server_name: 域名可以是正则表达式
server {
listen 80;
server_name ccc.nginx.com;
location / {
root /website/ccc;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
4.1 location
两种方式 二选一
/ 表示匹配所有
方式一
location / {
root /website/ccc;
index index.html index.htm;
}
方式二
location / {
proxy_pass http://www.baidu.com
}
- proxy_pass 后面可以直接是地址
proxy_pass http://www.baidu.com - 也可以是一个自定义的 服务 示例
upstream myserver {
server localhost:81;
server localhost:82;
server localhost:83;
}
server {
listen 80;
server_name www.nginx.com;
location / {
proxy_pass http://myserver;
}
}
5. 功能(一):反向代理, 网关
nginx 服务转发的功能其实就是反向代理;
反向代理:反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源;
区别于反向代理,什么是正向代理:正向代理伪造client,反向代理伪造server,正向代理隐藏客户端,反向代理隐藏服务端;
网关: 所有数据经过nginx服务器
6. 功能(二):负载均衡
后端业务服务器是一个集群,nginx g根据负载均衡算法来控制服务区访问哪一个
6.1 复制均衡算法
server {
listen 80;
server_name www.nginx.com;
location / {
proxy_pass http://myserver;
}
}
1.轮训 默认
upstream myserver {
server localhost:81 ;
server localhost:82 ;
server localhost:83 ;
}
6.2 权重
upstream myserver {
server localhost:81 weight=10;
server localhost:82 weight=5;
server localhost:83 weight=1;
server localhost:84 weight=20 down;
server localhost:85 weight=20 backup;
}
3.ip_hash
根据ip 地址Hash分配节点
upstream myserver {
server localhost:81 ;
server localhost:82 ;
server localhost:83 ;
}
4.least_conn
最少连接访问
5.fari
根据服务响应时间
7. 功能(三):动静分离
一个项目不仅仅有动态资源,还有静态资源;静态资源可以放在nginx下面;
location ~*/(js|img|css) {
root html;
index index.html index.htm;
}
8. 功能(四):URL ReWrite
location = /{
proxy_pass http://myserver;
}
flag :
- last 本条匹配完成后,不继续 location URI 匹配
- break 不在任何的匹配
- redirect 302 临时重定向 (爬虫看,可以继续爬数据)
- permanent 301 永久重定向
8. 功能(五):防盗链
本站点的数据 禁止浏览器以外的访问:校验http header 里面的 Referer
location = /{
valid_refers none|block www.nginx.com;
if($valid_refer){ //对 Referer错误 请求直接 403
return 403;
}
proxy_pass http://myserver;
}
-
none : 没有refer 可以访问 -
block:浏览器地址栏带https和 http
9. 功能(六):配置错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
10.高可用配置
keepalived + Nginx 配置HA 高可用
现在的生产环境中一般是多个节点来共同工作,当一个节点失效,需要可以快速节点的切换;
10.1 简介
nginx 自身是做不到高可用的,需要借助一个外部软件 keepalived 来保证;
keepalived 软件的基本原理就是多个机器中的 keepalived + 虚拟的IP地址(对外提供服务的IP) 保持心跳检测,当心跳检测不到就开始投票,存活的节点获取修改自己IP为虚拟IP;
缺点:可能是由于两台服务器之前是不连通的,两台服务器都可以向外部提供服务;
解决方案就是:添加脚本,脚本对我们后台服务检测(如MySQL ,Tomcat ),如果服务不可用,就立刻杀死 keepalived 进程;存活的keepalived 的节点可以迅速的切换;
10.2 架构图
10.3 安装准备
修改hosts
## 指向虚拟地址
192.168.141.150 www.nginx.com
两台虚拟机:
-
192.168.141.131 主节点 -
192.168.141.132 备用节点
yum 安装 keepalived
yum install -y keepalived
yum install -y keepalived --skip-broken
两台机器nginx 配置
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream myserver {
server 192.168.141.131:81;
server 192.168.141.132:81;
}
server {
listen 80;
server_name www.nginx.com;
location / {
proxy_pass http://myserver;
}
}
server {
listen 81;
server_name localhost;
location / {
root /website/aaa;
index index.html index.htm;
}
}
}
主节点keepalived 配置
! Configuration File for keepalived
global_defs {
router_id ng131
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.141.150
}
}
备用节点keepalived 配置
! Configuration File for keepalived
global_defs {
router_id ng132
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.141.150
}
}
测试成功;master 节点关闭后,BACKUP 节点切换IP 为 150 继续提供服务;
|