一. nginx简介
Nginx 是一个高性能的HTTP和反向代理web服务器,具有占有内存少,并发能力强的特点。
- 正向代理
- 反向代理
- 实际应用
安装
sudo apt install nginx
/usr/sbin/目录下是nginx命令所在目录,/etc/nginx/目录下是nginx所有的配置文件,用于配置nginx服务器以及负载均衡等信息。
进程简介
ps -ef | grep nginx #ps -ef查看全格式所有进程 e--Select all processes f-- Do full-format listing
有一个 master 进程和多个 worker 进程。master 进程主要用来管理 worker 进程,包含:接收来自外界的信号,向各 worker 进程发送信号,监控 worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动重新启动新的 worker 进程。多个 worker 进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个 worker 进程中处理,一个 worker 进程,不可能处理其它进程的请求。worker 进程的个数是可以设置的,一般我们会设置与机器 CPU 核数一致,这里面的原因与 Nginx 的进程模型以及事件处理模型是分不开的。
配置文件说明
打开/etc/nginx/nginx.conf,可以看到第 62行,http模块中有语句:include /etc/nginx/sites-enabled/*;
说明:
-
此目录下的所有配置文件均有效,修改配置文件应该是/etc/nginx/sites-enabled/default
-
如果需要备份/etc/nginx/sites-enabled/default,不能与default存放于同一目录,会产生配置冲突
-
另外,/etc/nginx/sites-available/default是当前生效的配置文件
-
default 文件中的server模块部分配置介绍 *见文末尾说明
server模块配置是http模块中的一个子模块,用来定义一个虚拟主机,也就是一个虚拟服务器的配置信息
server_name _; **见文末尾说明
default server; *** 见文末尾说明
-
基本命令
sudo nginx -s stop #停止服务 -s signal向master进程发送一个信号 stop信号
sudo nginx #这两条命令都可以启动服务
sudo systemctl start nginx
二. 虚拟主机配置
sudo vim /etc/nginx/sites-enabled/default
#原有的server模块保持不变,新增两个server模块
server {
listen 80;
listen [::]:80;
server_name www.example1.com;
root /var/www/example1;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
listen [::]:80;
server_name www.example2.com;
root /var/www/example2;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
vim末行模式
:79,91 co $ #需修改的部分复制两份,原始内容不变
:92,$ co $
:92,$ s/#// #92到文件结尾,把所有的#替换成空(相当于删除#) s替换 /分隔符
:79,$ s/^/#/g #添加# 把虚拟主机部分屏蔽,设置负载均衡
测试
sudo nginx -t #测试语法正确性
sudo systemctl restart nginx #重启服务
#修改/etc/hosts文件,进行域名解析
#windows浏览器访问,需要修改host文件C:\Windows\System32\drivers\etc\host
sudo vim /etc/hosts
设置防火墙
sudo ufw allow http
打开浏览器访问服务
三. 设置反向代理和负载均衡
- 修改配置文件,增加upstream节点
sudo vim /etc/nginx/sites-enabled/default
在http节点内增加upstream节点,主配置文件在/etc/nginx/nginx.conf的http节点中包括default,实际upstream节点增加在default文件的server节点外即可。
upstream mysrv{
server 192.168.92.134 weight=1 max_fails=2 fail_timeout=10s;
server 192.168.92.136 weight=2 max_fails=2 fail_timeout=10s;
#fail_timeout作用:在单位周期为fail_timeout设置的时间,中达到max_fails次数,这个周期次数内,如果后端同一个节点不可用,那么接将把节点标记为不可用,并等待下一个周期(同样时常为fail_timeout)再一次去请求,判断是否连接是否成功
#192.168.92.134 是ubuntu地址
#192.168.92.136 是另一台主机地址,windows或ubuntu
置虚拟主机时新增的server模块注释掉一个,在另一个中修改
server {
listen 80;
listen [::]:80;
server_name www.example1.com;
# server_name 192.168.1.7; #此处三行不需要
#root /var/www/html/local1/;
#index index.html;
location / {
try_files $uri $uri/ =404;
proxy_pass http://mysrv; #此处mysrv应是upstream节点的名称
}
}
重启服务
sudo systemctl restart nginx
修改网站首页index.html
sudo vim /var/www/html/*.html
设置第二台服务器的nginx(可用windows的IIS代替)
#安装nginx
sudo apt install nginx
#设置防火墙
sudo ufw allow from 192.168.92.1/24 #允许整个网段通过
#修改网站首页
sudo vim /var/www/html/*.html
打开第一台主机浏览器测试
补充说明:
官方文档:
http://nginx.org/en/docs/http/server_names.html
server {
listen 80 default_server;
******server_name _;
return 444;
}
There is nothing special about this name, it is just one of a myriad of invalid domain names which never intersect with any real name. Other invalid names like “--
” and “!@#
” may equally be used.
没什么特别的,大量无效域名中的一个,这个名字不会是真正域名,其它像“--
” and “!@#
”这样的字符同样可以在这里使用(也就是说,不是必须使用_,其它字符也可以)。
此处server_name _具体含义:对于任意其它域名,都由此server模块设定的default_server来处理,如果没有显式的指定default_server,默认由第一个server模块处理,即当前server。
default_server介绍
listen 80 default_server;
listen [::]:80 default_server;
#default_server 指令可以定义默认的 server 出处理一些没有成功
匹配server_name 的请求,如果没有显式定义,则会选取第一个定义
的 server 作为 default_server
server 模块部分配置
server {
listen 80;
server_name 域名 或192.168.1.100;
#local1是新建的网站1的根目录 根目录中新建index.html文件
# 输入内容The home page of example1
root /var/www/html/local1;
index index.php index.html index.html;
charset utf-8; #可以不写
#以下两行可以不写 ,因为在/etc/nginx/nginx.conf配置文件中已经指明日志路径
#如果按以下格式写 则需要sudo mkdir /usr/share/nginx/logs,否则服务不能启动
access_log logs/access.log; #logs目录相对于/usr/share/nginx目录而言
error_log logs/error.log;
…
}