1 基本安装
- nginx是个web服务器,常用作静态文件服务器,反向代理服务器,邮件代理服务器,负载均衡服务器
-
安装淘宝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
-
获取淘宝nginx的源代码
wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz
-
解压缩源代码包
tar -zxvf tengine-2.3.2.tar.gz
-
进入源代码目录开始编译三部曲
- 指定安装路径
./configure --prefix=/opt/s21/tngx
- 编译且安装
make && make install
- 安装完成之后,进入nginx的目录,
[root@wupeiqi tngx]#pwd /opt/s21/tngx [root@wupeiqi tngx]#ls conf html logs sbin conf 存放配置文件 , 指定了这个软件各种功能的一个文件而已 html 存放前端页面 logs nginx的运行日志 sbin nginx的可执行命令目录
- 进入sbin目录,启动nginx
./nginx ./nginx -s stop 停止nginx ./nginx -t 检查nginx.conf的语法是否正确 ./nginx -s reload 不重启nginx,重新加载nginx配置
2 nginx的核心学习
-
找到nginx.conf,学习语法
#这里的所有配置是nginx的核心功能 http { .... }
-
nginx的访问日志功能
http { include mime.types; default_type application/octet-stream; #日志格式化 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的虚拟主机配置,核心功能再次
http { #nginx支持多虚拟主机,只需要写入多个server关键字即可 #虚拟主机1 server { #基于端口的虚拟主机区分 listen 80; #基于域名的虚拟主机区分 server_name www.old21.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; #这里是nginx的url匹配,如同django的url规则一样 #当我的请求时 http://192.168.182.130:81/chouhuo.jpg 这样的时候,就进入如下location匹配 #这个是最低级的匹配,所有请求都会走到这里 location / { #root关键字定义虚拟主机的根目录, 这里是可以修改的 root /opt/alex/; #必须保证首页文件存在 index index.html index.htm; } } #虚拟主机2 server { listen 80; server_name www.old22.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; #这里是nginx的url匹配,如同django的url规则一样 #当我的请求时 http://192.168.182.130/wupeiqi.jpg 这样的时候,就进入如下location匹配 #这个是最低级的匹配,所有请求都会走到这里 location / { #root关键字定义虚拟主机的根目录, 这里是可以修改的 root /opt/wupeiqi/; #index参数是定义首页文件的名字的 index index.html index.htm; } } }
-
nginx的错误页面 404优化
server { listen 80; server_name www.old666.com; #通过这个参数定义即可, error_page 404 /404.html; location / { root /opt/wupeiqi; index index.html; } }
-
nginx反向代理
代理: 用户,客户端 中介,代理服务器, 房东,资源服务器 租房的客户 -> 中介,代理 -> 房东 浏览器 -> nginx -> django
- 反向代理服务器配置如下“
1.打开192.168.182.130 机器的nginx.conf,修改为如下 找到server{}虚拟主机,修改location如下 server { listen 80; server_name www.oldchouhuo.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; location / { # root /opt/alex/; # index index.html index.htm; #实现反向代理的功能参数 #实现反向代理的功能参数 #实现反向代理的功能参数 proxy_pass http://192.168.182.131; } }
3 nginx负载均衡
-
准备好2台资源服务器,本应该提供一样的数据,进行负载均衡,实验目的,看到不同的页面,所以准备不同的页面数据
- 192.168.182.131 资源服务器1 ,返回alex的页面
- 192.168.182.132 资源服务器2 ,返回武大郎的页面
-
准备负载均衡服务器,配置如下
#在nginx配置文件中,添加如下配置,定义负载均衡池,写入后端项目地址 #默认轮询方式 upstream mys21django { server 192.168.182.131; server 192.168.182.132; } #权重方式 upstream mys21django { server 192.168.182.131 weight=4; server 192.168.182.132 weight=1; } #ip哈希方式,根据用户的来源ip计算出哈希值,永远只指派给一个服务器去解析 #ip哈希不得与权重共同使用 #ip哈希不得与权重共同使用 upstream mys21django { server 192.168.182.131 ; server 192.168.182.132 ; ip_hash; } #虚拟主机配置如下 server { listen 80; server_name www.oldchouhuo.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; location / { # root /opt/alex/; # index index.html index.htm; #请求转发给负载均衡池 proxy_pass http://mys21django; } }