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
-
下载压缩包并且解压
# 1.win进入淘宝nginx官网,下载源代码,进行编译安装 http://tengine.taobao.org/index_cn.html # 2.在linux的opt目录下,下载nginx源代码 wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz # 3.解压缩源代码,准备编译三部曲 [root@s25linux opt]# tar -zxvf tengine-2.3.2.tar.gz
-
编译三部曲
# 1.进入源码目录,指定nginx的安装位置 [root@s25linux tengine-2.3.2]# ./configure --prefix=/opt/tngx232/ # 2.第二步与第三步 编译且编译安装,生成nginx的可执行命令目录 make && make install
-
安装完毕后生成文件夹
# 安装完毕后,会生成/opt/tngx232/文件夹,nginx可以使用的配置都在这里了 [root@s25linux tngx232]# ls conf html logs sbin # 文件夹解释 # conf 明显是存放*.conf配置文件的 # html 存放网页的静态文件的目录 # logs 日志 # sbin 存放nginx的可执行命令
-
添加环境变量
# 添加nginx到PATH中,可以快捷执行命令 # 永久修改PATH,开机就去读 vim /etc/profile # 写入 nginx的安装路径 PATH="/opt/tngx232/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:"
-
有关Nginx的命令
# 首次启动nginx,注意要关闭防火墙 # 直接输入nginx命令即可启动 # 有关nginx的命令 nginx #首次输入是直接启动,不得再次输入 nginx -s reload #平滑重启,重新读取nginx的配置文件,而不重启进程 nginx -s stop #停止nginx进程 nginx -t #检测nginx.conf语法是否正确
-
访问Nginx站点
# 默认访问nginx的首页站点url是 http://192.168.178.140:80/index.html
2.配置文件
-
代码风格
nginx的配置文件是c语言的代码风格 以; 号 表示每一行配置的结束 nginx.conf中 是以代码块形式 编写的 例如 主要的几个代码块 http{ } #里面定义了多个代码,是nginx的核心功能配置点 server{ } #虚拟主机代码块,定义了网站的目录地址,以及首页文件名字,监听的端口,等等功能 location { } #域名匹配代码块。。
-
详细代码解释
#user nobody; # 定义nginx的工作进程数,以cpu核数 为准 worker_processes 5; # 想用哪个功能,直接打开注释,或者写进来即可 error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #error_log "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G"; # pid文件的作用是,pid是用于启停进程的号码 # ps -ef去获取nginx的进程id # 把pid写入到 此 nginx.pid文件中, pid logs/nginx.pid; events { worker_connections 1024; } # 这个http区域,是nginx的核心功能区域 http { include mime.types; default_type application/octet-stream; #打开此nginx的访问日志功能,即可查看日志 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; sendfile on; # tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; # nginx开启静态资源压缩,比如nginx返回磁盘的html文件特别大,里面包含了诸多的js css,图片引用 # 一个html文件 达到4m大小 # 传输图片 等等都是高兴的 1080p图片 # 打开此功能,能够极大的提升网站访问,以及静态资源压缩 gzip on; # 提供静态资源缓存功能,第一次访问过网页之后,nginx能够让图片js等静态资源,缓存到浏览器上 # 浏览器下次访问网站,速度就几乎是秒开了 # 想要用这些功能,只需要在nginx里打开某些配置即可,作者都已经写好了该功能 # #这里的server区域配置,就是虚拟主机的核心配置 # nginx支持编写多个server{} 区域块,以达到多虚拟主机,多个站点的功能 # server{} 区域块,可以存在多个,且默认是自上而下去加载,去匹配的 # 目前这里是第一个server {} 区域块,端口是85 server { # 定义该网站的端口 listen 85; #填写域名,没有就默认即可 server_name localhost; #更改nginx的编码支持 charset utf-8; # 如此添加一行参数,当用户请求出错,出现404的时候,就返回 root定义的目录去寻找40x.html文件 # 讲师机器的配置,也就是去 /s25python/ 这个目录下 寻找 40x.html error_page 404 /40x.html; #access_log logs/host.access.log main; #access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main; # nginx的域名匹配,所有的请求,都会进入到这里 # 例如 192.168.178.140:85/lubenwei.jpg # 192.168.178.140:85/menggededianhua.txt location / { #这个root参数,是定义该虚拟主机,资料存放路径的,可以自由修改 # 当用户访问 192.168.178.140:85的时候,就返回该目录的资料 root /s25python/; # index参数,用于定义nginx的首页文件名字 ,只要在/s25python目录下存在index.html文件即可 index index.html index.htm; } } # 这里就是上一个Server{}的标签闭合处了,,可以写入第二个server{} # 注意 ,注意,server{} 标签快,是平级的关系,不得嵌套,检查好你的花括号 # 这里是第二个虚拟主机的配置了 server { listen 89; server_name _; # nginx的域名匹配 # 当用户访问 192.168.178.140:89的时候,返回该目录的内容 location / { root /s25linux/; index index.html; } } }
3.Nginx的多站点功能
也称之为是nginx的虚拟主机站点配置
指的就是在nginx中,能够通过文件目录的不同,可以定义多个不同的网站
-
基于域名的多虚拟主机
修改hosts文件,强制写入域名对应关系,比较麻烦
-
基于端口的多虚拟主机
1.修改nginx.conf配置如下,定义2个server{} 区域块即可
-
第一个虚拟主机的配置
# 目前这里是第一个server {} 区域块,端口是85 server { # 定义该网站的端口 listen 85; #填写域名,没有就默认即可 server_name localhost; #更改nginx的编码支持 charset utf-8; #access_log logs/host.access.log main; #access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main; # nginx的域名匹配,所有的请求,都会进入到这里 # 例如 192.168.178.140:85/lubenwei.jpg # 192.168.178.140:85/menggededianhua.txt location / { #这个root参数,是定义该虚拟主机,资料存放路径的,可以自由修改 # 当用户访问 192.168.178.140:85的时候,就返回该目录的资料 root /s25python/; # index参数,用于定义nginx的首页文件名字 ,只要在/s25python目录下存在index.html文件即可 index index.html index.htm; } }
-
第二个虚拟主机的配置
#这里就是上一个Server{}的标签闭合处了,,可以写入第二个server{} # 注意 ,注意,server{} 标签快,是平级的关系,不得嵌套,检查好你的花括号 # 这里是第二个虚拟主机的配置了 server { listen 89; server_name _; #nginx的域名匹配 # 当用户访问 192.168.178.140:89的时候,返回该目录的内容 location / { root /s25linux/; index index.html; } }
-
改完配置文件后,分别创建2个站点的资源目录
[root@s25linux conf]# mkdir /s25linux /s25python [root@s25linux conf]# echo "i like linux ,i very happy" > /s25linux/index.html [root@s25linux conf]# echo "i use python,i very nb" > /s25python/index.html #注意,改了配置文件,一定要平滑重启,否则不生效 [root@s25linux conf]# nginx -s reload #此时分别访问2个站点,即可看到2个站点的资料 192.168.178.140:85 192.168.178.140:89
4.404页面优化
如果nginx不做404优化,那么页面是非常丑的。。
1.修改nginx.conf,修改一行参数即可
server {
# 定义该网站的端口
listen 85;
#填写域名,没有就默认即可
server_name localhost;
#更改nginx的编码支持
charset utf-8;
# 如此添加一行参数,当用户请求出错,出现404的时候,就返回 root定义的目录去寻找40x.html文件
# 讲师机器的配置,也就是去 /s25python/ 这个目录下 寻找 40x.html
error_page 404 /40x.html; #注意别忘了分号
......
手动创建一个40x.html,咱们也可以去网上搜索404的html模板,修改此40x.html即可
[root@s25linux conf]# cat /s25python/40x.html
<meta charset=utf8>
我是自定义的404页面,你看我美不美...
注意还得重启nginx
nginx -s reload
5.访客日志
-
什么是访客日志
nginx的访客日志,能够记录,分析用户的请求行为 -什么时间点,访问的最频繁,比如路飞的网站,网站的流量,基本都在晚上,学生下了班,在线学习各种技术 -记录用户的请求频率,以此检测是否是爬虫等恶意请求,进行封禁。 -检测躲在代理ip后的 真实用户ip -检测用户ip,请求时间,请求的url内容,等等。。。。
-
访客日志的配置
修改nginx.conf 在 http{}代码块中,打开如下注释即可 #打开此nginx的访问日志功能,即可查看日志 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # 如果25期所有学生,在班级,同时访问路飞官网 # nginx日志检测到的ip地址是一样,还是不一样的? # 答案是一样的,因为大家都从同一路由器转发出去的公网 # 我们都是通过同一个宽带运营商提供的公网ip和路飞通信的 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 # 客户端身份信息,以此可以nginx判断,用户客户端是手机浏览器, # 就转发移动端页面给与用户 # 如果是pc的客户端,就转发给pc页面给与用查看 $http_x_forwarded_for # 记录客户端的来源真实ip 97.64.34.118,机器A用机器B的ip去访问, # 可以抓出机器A的地址,这个参数不是万能的,爬虫和反扒是相互的。。。 重启nginx -s reload 实时监测访客日志的信息
6.反向代理功能
6.1.正向代理及反向代理的区别
-
-
-
正向代理,,代理服务器,代理的是客户端 反向代理,,代理服务器,,代理的是服务端
-
6.2.反向代理的配置
按道理讲,需要准备2台linux服务器
192.168.178.134
192.168.178.140
但是条件有限,没有那么多服务器,装两个虚拟机也会卡
因此决定用如下的方案,很巧妙,用到了nginx支持的多虚拟主机功能
准备1台机器即可
如192.168.178.140 ,基于端口的不同,运行不同的站点
-
准备一台linux机器,安装好nginx之后,,修改nginx.conf如下,配置好2个server{}标签
-
第一个server{}标签,用于反向代理的作用,修改nginx.conf如下
# 第一个虚拟主机的配置,作用是反向代理了 # server { listen 80; server_name localhost; charset utf-8; error_page 404 /40x.html; # 这里的locaiton 路径匹配,如果你写的是root参数,就是一个web站点功能 # 如果你写的是proxy_pass参数,就是一个请求转发,反向代理功能 location / { #当请求发送给 192.168.178.140:80的时候 #直接通过如下的参数,转发给90端口 proxy_pass http://192.168.178.140:90; } }
-
第二个server{}标签,作用是返回机器上的资料,也就是一个web站点的功能
#第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的 server { listen 90; server_name _; #当请求来到 192.168.178.140:90的时候,就返回/s25proxy目录下的index.html location / { root /s25proxy/; index index.html; } }
-
创建资源文件夹,以及html页面内容
[root@s25linux conf]# cat /s25proxy/index.html <meta charset=utf8> 我是资源服务器,我是192.168.178.140 的90端口
-
重启nginx
nginx -s reload
-
查看效果
7.负载均衡
负载均衡搭建步骤
-
修改nginx.conf如下
-
第一个虚拟主机server{}的作用,是反向代理,80端口
# 用upstream关键词定义负载均衡池,写入资源服务器的地址 # 负载均衡的算法,默认是轮询机制,一台服务器处理一次 upstream s25real_server { server 192.168.178.140:90; server 192.168.178.140:95; } server { listen 80; server_name localhost; charset utf-8; error_page 404 /40x.html; # 这里的locaiton 路径匹配,如果你写的是root参数,就是一个web站点功能 # 如果你写的是proxy_pass参数,就是一个请求转发,反向代理功能 location / { #当请求发送给 192.168.178.140:80的时候 #直接通过如下的参数,转发给90端口 proxy_pass http://s25real_server; } }
-
第二个server{}标签的配置,作用是提供资源给用户看的,90端口
#第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的 server { listen 90; server_name _; #当请求来到 192.168.178.140:90的时候,就返回/s25proxy目录下的index.html location / { root /s25lol/; index index.html; } }
-
第三个server{}标签的作用,同样是返回资源页面,查看负载均衡效果的,95端口
#第三个server{}虚拟主机,作用是 提供资源服务器的内容的 server { listen 95; server_name _; location / { root /s25dnf/; index index.html; } }
-
-
分别准备2个资源服务器的内容
准备好 /s25lol/index.html 准备好 /s25dnf/index.html
-
此时访问页面即可查看效果
8.负载均衡算法
1.默认是轮询机制,每台服务器处理一次
2.加权轮询,修改nginx.conf如下,给与机器不同的权重
upstream s25real_server {
server 192.168.178.140:90 weight=4;
server 192.168.178.140:95 weight=1;
}
特此说明:以上内容参考于路飞学城于超老师的博客内容。如有侵权请联系