我们平时访问的网络网站就是WEB网络服务,允许用户通过浏览器访问互联网中的各种资源服务
WEB服务器会通过HTTP或者HTTPS的方式将请求内容传递给客户端
目前常见的WEB服务有IIS, Nginx和Apache等
WEB服务器和WEB框架的区别
WEB服务器:接收HTTP请求并返回数据
WEB框架:开发WEB应用程序,处理接收到的HTTP请求
-
开源免费
-
高性能,高并发
-
支持几万并发连接
-
资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到200M
-
-
安装灵活,使用方便
-
功能丰富
-
反向代理
-
负载均衡
-
缓存服务
-
访问日志
-
1.安装
nginx 官方nginx
tenginx 淘宝nginx
这2个一模一样,我这里采用后者,并且采用源代码安装
- 下载源代码
wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz
- 解压缩
tar -zxvf tengine-2.3.2.tar.gz
- 指定安装目录,检查编译环境
先更新本地依赖页
sudo apt-get update sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev libssl-dev libxslt1-dev libxml2-dev libgeoip-dev libperl-dev libtool sudo apt-get install openssl
./configure --prefix=/opt/tng232
- make进行编译
sudo make
- 生成可执行文件
sudo make install
- 配置环境变量
sudo vim /etc/profile PATH="/opt/python390/bin/:/opt/tng232/sbin:/home/parallels/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin" source /etc/profile
2.常用命令
-
第一次启动
nginx -c /../nginx.conf # 指定启动的配置文件,不指定nginx会自动加载默认路径的配置文件
-
平滑启动
sudo nginx -s reload -c /opt/tng232/conf/nginx.conf # 平滑启动,重新读取nginx配置文件,不重启nginx进程
-
停止进程
nginx -s stop -c /opt/tng232/conf/nginx.conf # 停止nginx进程
-
检查Nginx配置文件语法
nginx -t -c /opt/tng232/conf/nginx.conf
启动后可以访问
http://10.211.55.5:80
3.学习配置文件
配置文件在nginx安装的conf目录
nginx的配置文件是C语言风格的, 以 ;结束每一行的配置
配置文件是以代码块的形式编写的
主要有以下几个模块
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 logs/nginx.pid; events { # 每个worker进程支持的最大连接数 worker_connections 1024; } # 配置文件的核心区域 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; #access_log "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G" main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; # 打开此功能,能够极大的提升网站访问,以及静态资源压缩 gzip on; # 虚拟主机的核心配置 server1 { listen 80; server_name localhost; # nginx编码支持 charset utf-8 #charset koi8-r; #access_log logs/host.access.log main; #access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main; # nginx的域名匹配,所有的请求,都会进入到这里 location / { # 定义该虚拟主机资料存放路径,可以自由修改 root html; # 定义nginx首页文件名字,需要在root指定的目录下 index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } # 可以定义第二个虚拟主机的配置 server2 { listen 90; server_name localhost; # nginx编码支持 charset utf-8 # nginx的域名匹配,所有的请求,都会进入到这里 location / { # 定义该虚拟主机资料存放路径,可以自由修改 root html; # 定义nginx首页文件名字,需要在root指定的目录下 index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
4.nginx多站点功能
nginx的web站点也称为nginx的虚拟主机站点,通过文件目录的不同,定义多个不同的网站
多虚拟主机的实现方式
-
修改hosts文件,强制写入域名对应关系,比较麻烦
-
基于端口的虚拟主机
修改nginx.conf的端口配置,定义两个server与区块,如下
# 目前这里是第一个server {} 区域块,端口是85 server { # 定义该网站的端口 listen 85; server_name localhost; charset utf-8; location / { root /python/; index index.html index.htm; } } # 目前这里是第二个server {} 区域块,端口是85 server { # 定义该网站的端口 listen 89; server_name localhost; charset utf-8; location / { root /linux/; index index.html index.htm; } }
基于IP的虚拟主机
通过不同的IP区分不同的虚拟主机,此类比较少见,一般业务需要多IP的常见都会在负载均衡中绑定
5.nginx日志
日志作用
nginx的方可日志,能够记录,分析用户的请求行为 -什么时间点,访问的最频繁,比如某网站,网站的流量,基本都在晚上,学生下了班,在线学习各种技术 -记录用户的请求频率,以此检测是否是爬虫等恶意请求,进行封禁。
操作
改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"'; 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页面给与用查看
6.反向代理
正向代理,代理的是客户端
反向代理,代理的是服务端
nginx反向代理的操作:
第一个server{}标签,用于反向代理的作用,修改nginx.conf如下
# 第一个虚拟主机的配置,作用是反向代理了 server { listen 80; server_name localhost; charset utf-8; error_page 404 /40x.html; # 如果你写的是proxy_pass参数,就是一个请求转发,反向代理功能 location / { proxy_pass http://192.168.178.140:90; } }
第二个server{}标签,作用是返回机器上的资料,也就是一个web站点的功能
#第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的 server { listen 90; server_name _; location / { root /s25proxy/; index index.html; } }
7.负载均衡
负载均衡就是将请求均衡的分给不通的web服务端
负载均衡的搭建
第一个虚拟主机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; location / { proxy_pass http://s25real_server; } }
第二个server{}标签的配置,作用是提供资源给用户看的,90端口
#第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的 server { listen 90; server_name _; location / { root /s25lol/; index index.html; } }
第三个server{}标签的作用,同样是返回资源页面,查看负载均衡效果的,95端口
#第三个server{}虚拟主机,作用是 提供资源服务器的内容的 server { listen 95; server_name _; location / { root /s25dnf/; index index.html; } }
nginx负载均衡算法
- 轮询机制:默认的,每台服务器各一次
- 加权轮训机制
upstream s25real_server { server 192.168.178.140:90 weight=4; server 192.168.178.140:95 weight=1; }
8.搭建文件服务器
http服务器
server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; #access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main; location / { root /opt/tng232/download; # 指定哪个目录作为Http文件服务器的根目录 autoindex on; # 索引,开启目录文件列表 autoindex_exact_size on; # 显示文件大小 autoindex_localtime on; # 显示文件时间 } }
https服务器
server { listen 80; server_name server_name ***.com; #填写对应的域名; #charset koi8-r; #access_log logs/host.access.log main; #access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main; ssl on;
ssl_certificate ****.pem; #Nginx证书文件pem,注意位置不能有错
ssl_certificate_key ****.key; #Nginx证书文件key,注意位置不能有错 location / { root /opt/tng232/download; autoindex on; # 索引,开启目录文件列表 autoindex_exact_size on; # 显示文件大小 autoindex_localtime on; # 显示文件时间 } }