目录
一.安装 二.启动 配置文件 三.多虚拟主机 三.nginx 反向代理 四.nginx负载均衡配置
一.安装
编译安装nginx:
1.解决依赖关系
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
2.下载源码包 wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
3.解压缩源码包 tar -zxvf nginx-1.12.0
4.在当前路径下通过configure这个脚本文件执行,释放makefile,然后指定安装nginx的路径,以及开启模块功能ssl与状态模块功能
./configure --prefix=/opt/nginx1-12/ --with-http_ssl_module --with-http_stub_status_module 指定安装目录 以及一些安装配置
5.编译且编译安装
make && make install
二.启动 配置文件
1. 进入 sbin/nginx nginx -V 查看版本
6.在/opt/nginx1-12/ 安装好nginx的目录,找到一个sbin的文件夹 ,启动nginx服务 命令 sbin/nginx就可以启动了
1.检查nginx安装后的目录, /opt/nginx1-12
drwxr-xr-x 2 root root 333 12月 6 09:32 conf 配置文件存放的目录, nginx.conf这个文件就是nginx的主配置文件
drwxr-xr-x 2 root root 40 12月 6 09:32 html 存放网页根目录的文件夹,存放了index.html **.html **.gif **.jpg
drwxr-xr-x 2 root root 6 12月 6 09:32 logs 日志目录
drwxr-xr-x 2 root root 19 12月 6 09:32 sbin nginx启动脚本目录
2.nginx的可执行命令
- rwx(user) r-x(group) r-x(other) 1 root(属主) root(属组) 5656000 12月 6 09:32 sbin/nginx
./sbin/nginx #直接启动nginx
./sbin/nginx -s stop
./sbin/nginx -s reload #平滑重启(修改了nginx配置文件,不重启服务就加载配置且生效)
./sbin/nginx -t # 检测nginx.conf 配置文件的语法正确性
三.多虚拟主机
#虚拟主机1 nginx的主配置文件, nginx1-12/conf /nginx.conf 修改
server {
listen 80; 监听端口
server_name 0.0.0.0; #域名1 这里是nginx通过这个参数,来定位不同的虚拟主机
location / { # / 代表访问nginx的匹配路径
root /opt/html; 资源文件 #指明网页根目录在/data/huoying/文件夹下 存放静态文件 .htlm 图片视频...
index index.html index.htm; 访问域名时呈现的默认页面 必须有
# deny 192.168.1.103 拒绝一个ip地址 爬虫
}
#虚拟主机2 9 yy复制9行 t打印
server {
listen 80;
server_name www.s14hanjutv.com; #域2 这里是nginx通过这个参数,来定位不同的虚拟主机
location / { #代表访问nginx的匹配路径
root /data/hanju/; 资源文件 #指明网页根目录在/data/hanju/文件夹下 存放静态文件 .htlm 图片视频...
index index.html index.htm ; 默认首页 访问www.s14hanjutv.com 相当于访问www.s14hanjutv.com/index.html
}
多虚拟机 就可以 使用一个web服务 软件 展示多个域名 www.s14huoying.com www.s14hanjutv.com
2.重新加载nginx配置文件 ../sbin/nginx -t #检测语法 ../sbin/nginx -s reload #平滑重启 修改配置文件比重启
3.修改完后 创建所需要文件夹 /data/hanju/ 和文件资源 index.html tupian.jpg
4.写入到本地dns解析文件,由于我是在windows中通过浏览器访问,应该在windows的hosts文件中添加记录
hosts文件就是一个本地dns(就是将域名转化成ip地址)强制解析的文件
windows的hosts文件就在这里:C:\Windows\System32\drivers\etc\hosts ,写入如下信息
www.s14huoying.com 192.168.12.96 将 域名强制用 本机ip去解析
www.s14hanjutv.com 192.168.12.96
5.浏览器 访问时 www.s14hanjutv.com 就会访问到 index.html这个页面
如果 /data/hanju/ 下面有一个 tupian.jpg www.s14hanjutv.com /tupian.jpg 就会访问到图片
2.如果 index.html 写入 img标签 src='tupian.jpg' 就会从当前目录自动查找 就会在index页面显示这张页面
6.nginx状态模块功能: nginx1-12/conf /nginx.conf
1.在配置文件中server {}内,添加一个参数即可 就可以 域名/status 访问 查看信息
location /status {
stub_status on;
}
7. location语法
1. 一个server 两个
1.添加一个location /s14 {
alias /data/s14 # 先创建 存放文件位置 在s14文件下创建一个文件wyc.txt
} 就可以访问www.s14hanju.com/s14/wyc.txt 下的资源了
2.location 匹配优先级
# www.s14hanju.com/ # www.s14hanju.com/images/
1.location = / { 2.location ^~ /images/ {
我是代码1 我是代码2
} 精确匹配 } 匹配常规串,不做正则检查
# www.s14hanju.com/xxx.gif # www.s14hanju.com/av/xx资源
3.location ~* \.(gif|jpg|jpeg)$ { 4. location /av/ {
alias /data/img 我是代码4
} 正则匹配 ,通常静态资源 } 匹配常规字符,有正则优先正则
5.location / {
我是代码5 #如果你谁都没匹配到的话,默认走/,走django 处理动态请求,优先级最低
} 所有的location都不匹配后,默认匹配 3 5 常用
8.nginx访问日志功能: 反爬虫
1.在nginx1-12/conf /nginx.conf配置文件中,打开注释,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; 打开注释,nginx.conf
参数详解:
$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
打开了功能之后,可一通过access_log查看用户身份信息
9. nginx的错误页面优化:
1.在配置文件中添加 nginx1-12/conf /nginx.conf
server {
listen 80;
server_name www.s14huoying.com;
location / {
#指明网页根目录在/opt/html/文件夹下
root /data/huoying;
index index.html index.htm;
deny 192.168.12.120;
error_page 400 401 402 404 /40x.html; 出这些错误时 访问40x.htlm页面 必须存在 root指定目录
#当请求来自于wwww.s14huoying.com/status/
三.nginx 反向代理
概念 创建两个nginx 服务 一个ip 是 192.168.1.103 一个ip是192.168.1.114
第一个nginx 服务 在主配置文件nginx.conf 中写入一个server
server {
listen 80;
server_name www.s14huoying.com;
location / {
proxy_pass http://192.168.1.114;
}
#浏览器当请求 www.s14huoying.com 时 第一个nginx 服务请求来源是浏览器的IP地 址
然后会直接转接到 第二个nginx服务去请求资源 第二个nginx 服务 显示的请求 来源是 第一个nginx的ip地址
四.nginx负载均衡配置
1.环境准备,准备3台服务器
192.168.119.128 nginx入口node1 负载均衡器
192.168.119.130 web01
192.168.119.133 web02
2.关闭所有机器的防火墙
3.在node1节点上配置负载均衡配置(发牌人)
1.修改配置文件nginx.conf ,写入如下配置
upstream s14django { #定义负载均衡池名字叫做wycflask 与sever 同级
server 192.168.119.130:8000; #池子中存放2个服务器,默认轮训方式调度服务器
server 192.168.119.133:8000; 当访问 负载均衡器 时 接入这两个接口
}
root html; #root参数定义网页的根目录,可以写在虚拟主机内,局部变量 #如果写在server标签外,就是全局变量
负载均衡server 配置
server {
listen 80;
server_name 192.168.119.128 ;
location / { #当请求发送到www.s14huoying.com的时候,匹配到 / ,就执行以下代码
proxy_pass http://s14django; proxy_pass这个指向 upstream负载均衡池中的IP地址
include /opt/nginx1-12/conf/proxy_params; #这个proxy_params文手动件创建在/opt/nginx1-12/conf底下
} } #包含语法参数,将一个配置文件添加到当前虚拟主机生效
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.配置 web01 的应用服务器 5.配置web02的应用服务器
1.准备一个flask代码,运行
pip3 install flask
2.准备代码 myflask.py 2.准备代码 myflask.py
from flask import Flask from flask import Flask
app=Flask(__name__) app=Flask(__name__)
@app.route('/') @app.route('/')
def hello(): def hello():
return "<h1>我是web01</h1>" return "<h1>我是web01</h1>"
if __name__=="__main__": if __name__=="__main__":
app.run(host='0.0.0.0',port=8000) app.run(host='0.0.0.0',port=8000)
3.启动应用服务器 3.启动应用服务器
python3 myflask.py python3 myflask.py
这样访问 192.168.119.128 这个 IP地址时 会默认轮询 访问到 两个网页(两个web地址)
负载均衡池 分配权重
upstream s14django {
server 192.168.119.130:8000 weight =3; 访问时30%使用到web01服务器
server 192.168.119.133:8000 weight=7; 访问时70%使用到web02服务器 ,可将性能高的web服务器设置高值
}