服务器种类:
IIS:windows上的服务器
Apache:Linux上一代的高性能服务器
Nginx:Linux新一代高性能服务器
通过curl -i xxxxx.xxxx命令可以查看网络请求信息以及使用的服务器。
nginx特点:
占用的系统资源少,支持的并发数更多,还可以作为反向代理、负载均衡
一、Nginx安装配置
# 依赖库
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
# 编译安装
1.下载源码包
wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
2.解压缩源码
tar -zxvf nginx-1.12.0.tar.gz
3.配置,编译安装 开启nginx状态监测功能
./configure --prefix=/opt/nginx1-12/ --with-http_ssl_module --with-http_stub_status_module
make && make install
4.启动nginx,进入sbin目录,找到nginx启动命令
cd sbin
./nginx #启动
./nginx -s stop #关闭
./nginx -s reload #平滑重启(修改了配置文件,不重启就能加载)
二、Nginx目录结构
- conf 存放nginx所有配置文件的目录,主要nginx.conf
- html 存放nginx默认站点的目录,如index.html、error.html等
- logs 存放nginx默认日志的目录,如error.log access.log
- sbin 存放nginx主命令的目录,sbin/nginx
三、Nginx主配置文件解析
Nginx主配置文件/etc/nginx/nginx.conf
是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。一般,每个区块以一对大括号{}
来表示开始与结束。
CoreModule核心模块
user www; #Nginx进程所使用的用户
worker_processes 1; #Nginx运行的work进程数量(建议与CPU数量一致或auto)
error_log /log/nginx/error.log #Nginx错误日志存放路径
pid /var/run/nginx.pid #Nginx服务运行后产生的pid进程号
events事件模块
events {
worker_connections //每个worker进程支持的最大连接数
use epool; //事件驱动模型, epoll默认
}
http内核模块
//公共的配置定义在http{}
http { //http层开始
...
//使用Server配置网站, 每个Server{}代表一个网站(简称虚拟主机)
'server' {
listen 80; //监听端口, 默认80
server_name localhost; //提供服务的域名或主机名
access_log host.access.log //访问日志
//控制网站访问路径
'location' / {
root /usr/share/nginx/html; //存放网站代码路径
index index.html index.htm; //服务器返回的默认页面文件
}
//指定错误代码, 统一定义错误页面, 错误代码重定向到新的Locaiton
error_page 500 502 503 504 /50x.html;
}
...
//第二个虚拟主机配置
'server' {
...
}
include /etc/nginx/conf.d/*.conf; //包含/etc/nginx/conf.d/目录下所有以.conf结尾的文件
} //http层结束
四、Nginx多虚拟主机
可以在一台服务器上运行多个虚拟主机,不同的虚拟主机返回不同的页面。
#多虚拟主机的配置
1.修改nginx底下的conf/nginx.conf ,修改信息如下
server {
listen 80;
server_name www.s14huoying.com;
location / {
#指明网页根目录在/opt/html/文件夹下
root /data/huoying;
index index.html index.htm;
}
}
server {
listen 80;
server_name www.s14hanju.com;
location / {
#指明网页根目录在/opt/html/文件夹下
root /data/hanju;
index index.html index.htm;
}
}
2.重新加载nginx配置文件
../sbin/nginx -t #检测语法
../sbin/nginx -s reload #平滑重启
3.准备不同的虚拟主机的站点资料
mkdir -p /data/{huoying,hanju}
放入不同的资料如下
├── hanju
│ ├── hanju.jpg
│ └── index.html
└── huoying
├── index.html
└── mingren.jpg
4.写入到本地dns解析文件,由于我是在windows中通过浏览器访问,应该在windows的hosts文件中添加记录
hosts文件就是一个本地dns(就是将域名转化成ip地址)强制解析的文件
windows的hosts文件就在这里:C:\Windows\System32\drivers\etc\hosts ,写入如下信息
192.168.12.96 www.s14huoying.com
192.168.12.96 www.s14hanju.com
5.在windows中,测试访问多域名配置
五、Nginx状态模块
在配置文件中添加两行即可:
location /status {
stub_status on;
}
这样访问xxxxxx/status就可以查看当前的连接数量等信息。
六、Nginx访问日志
在配置文件中,打开注释,nginx.conf
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 logs/access.log main; # 保存路径
参数详解:
$remote_addr 记录客户端ip
$remote_user 远程用户,没有就是 “-”
$time_local 对应[14/Aug/2018:18:46:52 +0800]
$request 对应请求信息"GET /favicon.ico HTTP/1.1"
$status 状态码
$body_bytes_sent 571字节 请求体的大小
$http_referer 对应“-” 由于是直接输入浏览器就是 -
$http_user_agent 客户端身份信息
$http_x_forwarded_for 记录客户端的来源真实ip 97.64.34.118
打开了功能之后,可一通过logs/access_log查看用户身份信息
192.168.12.60 - - [06/Dec/2018:11:24:04 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36" "-"
七、反向代理
正向代理的是客户端,是客户端通过代理去访问一个网站。
反向代理的是服务器,是当服务器接收到一个请求后转发给代理服务器。
server {
listen 80;
server_name www.s14huoying.com;
location / {
proxy_pass http://192.168.12.38; #请求会直接转发给http://192.168.12.38;
}
八、集群和负载均衡
集群:就是用多台服务器来共同运行一个nginx,保证多用户可以同时访问,也避免一台服务器宕机导致的整个服务瘫痪。
负载均衡:就是指定多个反向代理,但是nginx会自动帮我们通过一定的算法切换不同的代理,让多个代理处理的请求数达到一个平衡。
nginx负载均衡配置
1.环境准备,准备3台服务器
192.168.12.96 nginx入口node1
192.168.12.67 应用服务器1
192.168.12.38 应用服务器2
2.关闭所有机器的防火墙
3.在node1节点上配置负载均衡配置(发牌人)
1.修改配置文件nginx.conf ,写入如下配置
#定义负载均衡池名字叫做s14django
upstream s14django {
#池子中存放2个服务器,默认轮询方式调度服务器
server 192.168.12.38:8000;
server 192.168.12.67:8000;
# server 192.168.12.67:8000 weight=2;
# server 192.168.12.38:8000 weight=3;
# 表示这两个服务器处理请求的比例是2:3,这是按照权重调度服务器
}
#root参数定义网页的根目录,可以写在虚拟主机内,局部变量
#如果写在server标签外,就是全局变量
root html;
#虚拟主机1
server {
listen 80;
server_name www.s14huoying.com;
location / {
#当请求发送到www.s14huoying.com的时候,匹配到 / ,就执行以下代码
proxy_pass http://s14django;
#包含语法参数,将一个配置文件添加到当前虚拟主机生效,这个文件要手动创建
#这个proxy_params文件创建在/opt/nginx1-12/conf底下
include proxy_params;
}
}
2.手动创建这个参数文件
touch /opt/nginx1-12/conf/proxy_params
写入信息
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
4.配置两台应用服务器
1.准备一个flask代码,运行
pip3 install flask
2.准备代码 myflask.py
from flask import Flask
app=Flask(__name__)
@app.route('/')
def hello():
return "<h1>我是伟华</h1>"
if __name__=="__main__":
app.run(host='0.0.0.0',port=8000)
3.启动应用服务器
python3 myflask.py 5.通过访问nginx负载均衡器入口,查看负载均衡 是否正常分配,默认是轮训方式
1.访问自己的nginx负载均衡的ip地址,查看结果