Day51-Nginx多实例知识与大厂企业级实战
- 1. 什么是nginx多实例?
- 2. 为什么要用多实例?
- 3. 大厂数百个业务项目,如何来管理?
- 4. 大厂上百项目web分用户解决方案
- 4.1 编译nginx环境实践:
- 4.2 zuma实例(利用普通用户权限将不同业务进行彻底分离管理)
- 4.3 inca实例(利用普通用户权限将不同业务进行彻底分离管理)
- 5. 虚拟主机特殊功能优化
- 5.1 恶意域名解析:
客户端访问nginx虚拟主机的原理流程
nginx多实例实践
nginx多实例大厂应用案例
nginx恶意域名解析及解决方案
nginx别名介绍及应用实践
1. 什么是nginx多实例?
简单理解,一个nginx master进程对应一个实例。
运行一个实例:
/usr/sbin/nginx -c /etc/nginx/nginx01.conf
运行多个实例。
/usr/sbin/nginx -c /etc/nginx/nginx02.conf
/usr/sbin/nginx -c /etc/nginx/nginx03.conf
2. 为什么要用多实例?
#运行www
/usr/sbin/nginx -c /etc/nginx/nginx02.conf
#运行blog
/usr/sbin/nginx -c /etc/nginx/nginx03.conf
#运行bbs:
/usr/sbin/nginx -c /etc/nginx/nginx01.conf
08年淘宝,分用户管理(类似现在KVM,docker)
3. 大厂数百个业务项目,如何来管理?
www blog bbs 加起来200个。
共赢:
分用户解决方案:解决开发和运维之间打架争权限问题,顺便就把网站宕机的责任推给他了。
1.为每个业务建立一个普通用户inca。
2.把普通用户的家目录,作为项目的站点目录(/home/inca目录权限是700,天然所有项目做了权限隔离)。
3.把配置文件、访问日次、错误日志都放到/home/inca目录。
4.nginx -c nginx.conf方法启动(普通用户无法启动特权端口(默认端口),用8080代替原理的80端口(前端有负载均衡))。
5.管理权限是inca用户(只要登录inca用户,可以做一切想做的事)。
6.把inca用户权限给开发组组长(分配轮流负责网站宕机。)
7.把200个项目,创建200个用户,分为200个实例,200人,10人一个小组。10个用户给他们。
8.后半夜宕机了,开发起来。处理不了,报警研发经理,报警研发总监,报警CTO。跟运维无关。
9.200个项目,10个运维,全给开发了,需要1个够了。给3个运维工资。
10.网站宕机会不会减少?网站宕机和开发相关,他写代码就会重视了。
11.学习开发,学习devops,开发自动化平台,搞云原生。。。。做优化,做架构调整。
12.流量翻倍的时候,不增加运维,80台。提前未雨绸缪。
13.工资又翻倍了。。
14.把运维和开发绑在一条绳上(系统网络归运维,服务宕机归开发)
4. 大厂上百项目web分用户解决方案
4.1 编译nginx环境实践:
1.添加两个普通用户并设置密码
[root@web02 ~]# useradd zuma
[root@web02 ~]# useradd inca
[root@web02 ~]# echo 123456|passwd --stdin inca
[root@web02 ~]# echo 123456|passwd --stdin zuma
2.在不同的用户家目录下面创建各种目录
[root@web02 ~]# cd /home/inca/
[root@web02 inca]# mkdir conf/extra log html -p
[root@web02 inca]# tree
├── conf #主配置文件目录
│ └── extra #虚拟主机目录
├── html #inca站点目录
└── logs #日志目录
或者直接拷贝
[root@web02 zuma]# cp -a /application/nginx/{conf,logs,html} /home/inca
[root@web02 zuma]# cp -a /application/nginx/{conf,logs,html} /home/zuma
4.2 zuma实例(利用普通用户权限将不同业务进行彻底分离管理)
1)配置nginx配置文件
[root@web02 ~]# ls -ld /home/zuma
drwx------ 5 zuma zuma 114 7月 15 16:29 /home/zuma
[root@web02 ~]# chown -R zuma.zuma /home/zuma
[root@web02 ~]# su - zuma
[zuma@web02 ~]$ tree
.
├── conf
│?? ├── extra
│?? │?? └── 01_www.etiantian.org.conf
│?? └── nginx.conf
├── html
│?? ├── 50x.html
│?? └── index.html
└── logs
├── access.log
├── error.log
└── nginx.pid
##主配置(注意路径)
[zuma@web02 ~]$ cat conf/nginx.conf
user zuma;
worker_processes 1;
events {
worker_connections 1024;
}
error_log /home/zuma/logs/error.log warn;
pid /home/zuma/logs/nginx.pid;
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include /home/zuma/conf/extra/*.conf;
}
#虚拟主机配置(注意路径)
[zuma@web02 ~]$ cat conf/extra/01_www.etiantian.org.conf
server {
listen 8081;
server_name blog.etiantian.org;
location / {
root /home/zuma/html;
index index.html index.htm;
}
access_log /home/zuma/logs/access.log main;
}
[zuma@web02 ~]$ cat html/index.html
blog
2)检查语法
[zuma@web02 ~]$ /application/nginx/sbin/nginx -c /home/zuma/conf/nginx.conf -t
nginx: [alert] could not open error log file: open() "/application/nginx-1.20.1//logs/error.log" failed (13: Permission denied)
2021/07/15 16:21:10 [warn] 1702#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /home/zuma/conf/nginx.conf:1
nginx: the configuration file /home/zuma/conf/nginx.conf syntax is ok
nginx: configuration file /home/zuma/conf/nginx.conf test is successful
特别提示:[warn] [alert] 并非错误,可以忽略。
3)启动并检查
[zuma@web02 ~]$ /application/nginx/sbin/nginx -c /home/zuma/conf/nginx.conf &>/dev/null
[zuma@web02 ~]$ lsof -i :8081
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1705 zuma 5u IPv4 27729 0t0 TCP *:tproxy (LISTEN)
nginx 1706 zuma 5u IPv4 27729 0t0 TCP *:tproxy (LISTEN)
4)配置/etc/hosts解析,并访问
[zuma@web02 ~]$ curl www.etiantian.org:8081
www
(成功欧耶)
4.3 inca实例(利用普通用户权限将不同业务进行彻底分离管理)
1)配置nginx配置文件
[root@web02 ~]# ls -ld /home/inca
drwx------ 5 inca inca 114 7月 15 16:29 /home/inca
[root@web02 ~]# chown -R inca.inca /home/inca
[root@web02 ~]# su - inca
[inca@web02 ~]$ tree
.
├── conf
│ ├── extra
│ │ └── 02_blog.etiantian.org.conf
│ └── nginx.conf
├── html
│ ├── 50x.html
│ └── index.html
└── logs
├── access.log
├── error.log
└── nginx.pid
##主配置(注意路径)
[inca@web02 ~]$ cat conf/nginx.conf
user inca;
worker_processes 1;
events {
worker_connections 1024;
}
error_log /home/inca/logs/error.log warn;
pid /home/inca/logs/nginx.pid;
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include /home/inca/conf/extra/*.conf;
}
#虚拟主机配置(注意路径)
[inca@web02 ~]$ cat conf/extra/02_blog.etiantian.org.conf
server {
listen 8082;
server_name blog.etiantian.org;
location / {
root /home/inca/html;
index index.html index.htm;
}
access_log /home/inca/logs/access.log main;
}
[inca@web02 ~]$ cat html/index.html
blog
2)检查语法
[inca@web02 ~]$ /application/nginx/sbin/nginx -c /home/inca/conf/nginx.conf -t
nginx: [alert] could not open error log file: open() "/application/nginx-1.20.1//logs/error.log" failed (13: Permission denied)
2021/07/15 16:21:10 [warn] 1702#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /home/inca/conf/nginx.conf:1
nginx: the configuration file /home/inca/conf/nginx.conf syntax is ok
nginx: configuration file /home/inca/conf/nginx.conf test is successful
特别提示:[warn] [alert] 并非错误,可以忽略。
3)启动并检查
[inca@web02 ~]$ /application/nginx/sbin/nginx -c /home/inca/conf/nginx.conf &>/dev/null
[inca@web02 ~]$ lsof -i :8082
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1705 inca 5u IPv4 27729 0t0 TCP *:tproxy (LISTEN)
nginx 1706 inca 5u IPv4 27729 0t0 TCP *:tproxy (LISTEN)
4)配置/etc/hosts解析,并访问
[inca@web02 ~]$ curl blog.etiantian.org:8082
blog
(成功欧耶)
5. 虚拟主机特殊功能优化
5.1 恶意域名解析:
一:什么是恶意域名解析
www.jd.com A 1.1.1.1
有一个人想养域名(www.520.com),恶意解析,解析到1.1.1.1
会返回jd.com第一个虚拟主机。
60.9.5.3 www.520.com
一般情况下,要使域名能访问到网站需要两步,第一步,将域名解析到网站所在的主机,第二步,在web服务器中将域名与相应的网站绑定。但是,如果通过主机IP能直接访问某网站,那么把域名解析到这个IP也将能访问到该网站,而无需在主机上绑定,也就是说任何人将任何域名解析到这个IP就能访问到这个网站。
二:恶意域名解析的危害
可能您并不介意通过别人的域名访问到您的网站,但是如果这个域名是未备案域名呢?
假如那域名是不友善的域名,比如曾经指向非法网站,容易引发搜索引擎惩罚,连带IP受到牵连。即使域名没什么问题,但流量也会被劫持到别的域名,从而遭到广告联盟的封杀。
三;如何防止,配置里第一个标签如下配置
server{
listen 80;
server_name _default;
return 500;
}
1)增加别名:一个名字以外的另一名字
张三、小张
www.etiantian.org
用户输入etiantian.org
[root@web02 /application/nginx/conf]# cat extra/01_www.conf
server {
listen 80;
server_name www.etiantian.org etiantian.org;
location / {
root html/www;
index index.html index.htm;
}
}
2)为什么要使用别名
1.用户需求
www.etiantian.org
用户喜欢输入etiantian.org,简单。
2.监控相同域名集群的不同节点URL。