欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

linux--nginx学习

程序员文章站 2022-06-15 18:20:36
nginx 1.nginx安装编译 2.下载tengine 3.解压缩 4.编译 4.1指定安装路径 4.2开始编译 4.3开始安装 5.配置环境变量 6.启动nginx,检查进程,端口 7.nginx的配置文件 nginx的静态文件服务功能 nginx.conf 中定义的server{}虚拟主机关 ......

nginx

1.nginx安装编译

1.yum install nginx(自动解决依赖) 
2.源代码编译安装(优秀,*选择软件版本,自定义第三方功能比如开启https)
3.rpm手动安装(垃圾)

2.下载tengine

最好别再root在操作,在opt在执行该条命令
wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz

3.解压缩

ls查看下载后的文件
解压缩:tar -zxvf tengine-2.3.2.tar.gz 
进入解压缩后的文件:cd tengine(解压缩后的)

4.编译

4.1指定安装路径

./configure --prefix=/opt/tbnginx/     /opt/tbnginx/ 为安装路径

4.2开始编译

make命令  生成makefile

4.3开始安装

make install  

5.配置环境变量

进入到 tengine下的sbin目录
需要把path写入/etc/profile #每次开机都加载 
    vim /etc/profile

把path写入到环境变量中:                     path="/opt/python367/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/tbnginx/sbin"

手动读取,让path生效
    source /etc/profile

6.启动nginx,检查进程,端口

检查进程:ps aux | grep nginx
检查端口:netstat -tunlp | grep 80
直接输入nginx命令,第一次是启动nginx
nginx -s stop  #停止
nginx -s reload  #平滑重启,不停止进程,重新读取配置文件 
nginx  -t  #检测nginx.conf语法是否正确,更安全


在浏览器中输入ip:端口访问

7.nginx的配置文件

[root@bogon tbnginx]# ls
    conf    存放nginx的配置文件
    html    存放nginx静态文件的
    logs    nginx的运行日志,错误日志,访问日志
    sbin    存放可执行命令 

nginx的静态文件服务功能

nginx.conf 中定义的server{}虚拟主机关键词定义

1.
    [root@bogon tbnginx]# cd tbnginx/
    [root@bogon tbnginx]# cd html/
2.
     [root@bogon html]# ls
        50x.html  index.html
     执行 vim index.html  #进入该问文件的编辑模式    
        

server{}定义虚拟主机功能

server {
        #定义网站的端口
        listen       81;
        #定义网站匹配的域名 
        server_name  localhost;
        #server_name  _;
        #server_name  www.mypython.com;
    #定义虚拟主机的访问日志功能,记录用户的ip,以及请求信息,和爬虫代理后面的真实ip等功能
    #access_log  logs/host.access.log  main;
    #access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2g"  main;
    # location作用是匹配url,如同 django的 url.py功能一样
    # 最低级匹配,当请求时 192.168.16.85:81/ 就进入如下location
    location / {
       #这个root关键词 是定义静态文件存放目录的
        root   /opt/xx.html;
    #index参数,定义网站首页文件名的 
        index  index.html index.htm;
    }
    #  这个location可以定义多个,比如 你想让 192.168.16.85:81/static/js/luffy.js
    location  /static  {
    #给路径添加别名 
    alias   /opt/crm/static/;}

nginx的多虚拟主机功能

一台服务器,基于域名的不同,访问不同的网站资料
也就是准备2个server{}的定义

本地的hosts文件
c:\windows\system32\drivers\etc\hosts

第一个server{ } 虚拟主机 ,www.pian.com

server {
                #定义网站的端口
                listen       80;
                #定义网站匹配的域名 
                server_name  www.pian.com;
                #server_name  _;
                #server_name  www.mypython.com;

                #定义虚拟主机的访问日志功能,记录用户的ip,以及请求信息,和爬虫代理后面的真实ip等功能
                #access_log  logs/host.access.log  main;
                #access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2g"  main;
                # location作用是匹配url,如同 django的 url.py功能一样
                # 最低级匹配,当请求时 192.168.16.85:81/ 就进入如下location
                location / {
                   #这个root关键词 是定义静态文件存放目录的
                    root   /opt/pian;
                #index参数,定义网站首页文件名的 
                    index  index.html index.htm;
                }
                #当你的请求时 www.pian.com/static/55kai.jpg  
                location  /static  {
                #给路径添加别名 
                alias   /opt/crm/static/;
                        #http://www.pian.com/static/360wallpaper.jpg
        }
    
    }

第二个虚拟主机 www.xxlol.com

server {
    listen  80;
    server_name  www.xxlol.com;
    location  / {
    root  /opt/xxlol;
    index   index.html;
    }

}

nginx的访问日志功能

打开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;
    access_log  "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2g"  main;
    
    
进入到cd tbnginx/logs
实时监测 :tail -f access.log
当再次访问的时候logs就会多一条 记录

nginx 404错误页面优化

        location / {
           #这个root关键词 是定义静态文件存放目录的
            root   /opt/pian;
        #index参数,定义网站首页文件名的 
            index  index.html index.htm;
        }

            error_page  404              /404.html;
        
        对/404.html进行编辑或添加新的内容
        keepalive_timeout : 60

nginx配置反向代理

需要准备3台机器
1是客户端,发请求的
2是代理服务器,需要安装nginx,实现代理转发功能
3是资源服务器,提供数据的 

正确的操作应该是
准备一个windows机器,两个linux机器(一个是安装nginx用作代理,一个启动django提供数据)
我考虑到大家机器不行
解决办法

在一台linux上,启动一个nginx,第一个server{}虚拟主机标签,作用是反向代理

第二个server{}虚拟主机标签,模拟是另一台linux,提供数据的 


浏览器  ->  nginx  ->  django
浏览器  <-  nginx  <-  django

配置反向代理

server {
    listen       80;
    server_name  _;
    location / {
    #反向代理的参数 
    proxy_pass   http://127.0.0.1:81;
    }
    error_page  404              /404.html;
}

nginx负载均衡

环境准备
准备四台机器
第一台是window,用于浏览器法请求

第二台个是nginx,安装nginx,进行请求分发,负载均衡 

第三台,讲道理,应该运行django

第四台,一样的,也是运行django代码

在一个linux机器上,安装一个nginx软件,通过多个server{}模拟多台机器的工作

nginx的环境准备,nginx.conf配置文件

#通过upstream关键词,定义服务器地址池
upstream  server  {
server  127.0.0.1:81;
server  127.0.0.1:82;
server  127.0.0.1:83;
}

   #定义第一个虚拟主机 server{} ,功能是 进行反向代理,负载均衡 
   server {
        listen 80;
        server_name _;
        location  /  {
        proxy_pass http://myserver;
}

}
#第二个server,模拟第一台django
server  {
listen  81;
server_name _;
location  /  {
    root  /opt/django1;
    index  index.html;
}
}
#定义第三个server,模拟第二台django
server {
  listen 82;
server_name  _;
location  / {
  root  /opt/django2;
  index  index.html;
}
}

#定义第四个server,模拟第三台django,讲道理,这三台django应该提供一样的数据 
server {
  listen 83;
server_name  _;
location  / {
  root  /opt/django3;
  index  index.html;
}
}

nginx的负载均衡规则

1.轮训机制 ,每个机器,解析一次
2.权重机制 ,哪台机器的权重高,请求优先发给谁,有权重比例设置
        upstream  myserver  {
    server  127.0.0.1:81 weight=1;  # weight权重 安比例分配
    #server  127.0.0.1:82 weight=3;
    server  127.0.0.1:83 weight=4;
    }

3.ip_hash  ,真对用户的ip地址得到哈希值,永久发给一台机器 ,ip哈希方式,不得和权重一起用 
    #通过upstream关键词,定义服务器地址池
    upstream  myserver  {
    server  127.0.0.1:81 ;
    #server  127.0.0.1:82 ;
    server  127.0.0.1:83 ;
    ip_hash;
    }

4.url_hash  ,不用