nginx学习

1 基本安装

  • nginx是个web服务器,常用作静态文件服务器,反向代理服务器,邮件代理服务器,负载均衡服务器
  1. 安装淘宝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
    
  2. 获取淘宝nginx的源代码

    wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz
    
  3. 解压缩源代码包

    tar -zxvf tengine-2.3.2.tar.gz
    
  4. 进入源代码目录开始编译三部曲

    1. 指定安装路径
    ./configure --prefix=/opt/s21/tngx
    
    1. 编译且安装
    make && make install 
    
    1. 安装完成之后,进入nginx的目录,
    [root@wupeiqi tngx]#pwd
    /opt/s21/tngx
    [root@wupeiqi tngx]#ls
    conf  html  logs  sbin
    
    conf 存放配置文件 , 指定了这个软件各种功能的一个文件而已  
    html 存放前端页面
    logs nginx的运行日志
    sbin  nginx的可执行命令目录
    
    1. 进入sbin目录,启动nginx
    ./nginx  
    ./nginx -s stop 停止nginx
    ./nginx -t  检查nginx.conf的语法是否正确
    ./nginx -s reload  不重启nginx,重新加载nginx配置
    

2 nginx的核心学习

  1. 找到nginx.conf,学习语法

    #这里的所有配置是nginx的核心功能
    http {
    
    ....
    }
    
  2. 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;                                               
    	...
    	
    }
    
  3. 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;
    			}
    	
    	}
    
    }
    
  4. nginx的错误页面 404优化

    server {
            listen 80;
            server_name www.old666.com;   
    #通过这个参数定义即可,		
            error_page  404              /404.html;
            location / {
                    root   /opt/wupeiqi;
                    index index.html;
            }
    
    }
    
  5. 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负载均衡

  1. 准备好2台资源服务器,本应该提供一样的数据,进行负载均衡,实验目的,看到不同的页面,所以准备不同的页面数据

    • 192.168.182.131 资源服务器1 ,返回alex的页面
    • 192.168.182.132 资源服务器2 ,返回武大郎的页面
  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;
            }
    }
    
原文地址:https://www.cnblogs.com/kevin6/p/11799607.html