• Linux


    Linux - nginx基础及常用操作

    nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件。它是一个俄罗斯人lgor sysoev开发的,作者将源代码开源出来供全球使用。
    nginx比它大哥apache性能改进许多,nginx占用的系统资源更少,支持更高的并发连接,有更高的访问效率。
    nginx不但是一个优秀的web服务软件,还可以作为反向代理,负载均衡,以及缓存服务使用。
    安装更为简单,方便,灵活。
    nginx可以说是非常nb了
    
    • 支持高并发,能支持几万并发连接
    • 资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到200M
    • 可以做http反向代理和负载均衡
    • 支持异步网络i/o事件模型epoll

    Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。

    Tengine淘宝nginx安装流程

    1.淘宝nginx的学习使用,安装

    下载源码包

    cd /opt
    
    wget -c http://tengine.taobao.org/download/tengine-2.2.0.tar.gz
    

    2.卸载掉之前,学习yum时候,安装的nginx软件,

    yum remove nginx -y 
    

    3。解决编译安装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
    

    4.解压缩源码包,安装

    解压

    tar -zxvf tengine-2.2.0.tar.gz
    

    源码编译安装三部曲

    cd  tengine-2.2.0
    
    	1.释放makefile
    
    	./configure --prefix=/opt/tnginx220
    
    cd tnginx220
    
    	2.编译nginx
    
    	make 
    
    	3.编译安装
    
    	make install 
    

    4.编译完成后,tnginx就可以用了

    学习nginx的代码目录结构

    [root@master tnginx220]# pwd
    
    /opt/tnginx220
    
    [root@master tnginx220]#
    
    [root@master tnginx220]# ll
    
    total 8
    
    drwx------. 2 nobody root    6 Mar 11 08:51 client_body_temp
    
    drwxr-xr-x. 2 root   root 4096 Mar 11 08:50 conf                #放nginx所有配置文件的地儿
    
    drwx------. 2 nobody root    6 Mar 11 08:51 fastcgi_temp
    
    drwxr-xr-x. 2 root   root   40 Mar 11 08:50 html                #存放前端 html文件的      
    
    drwxr-xr-x. 2 root   root 4096 Mar 11 08:50 include
    
    drwxr-xr-x. 2 root   root   41 Mar 11 08:52 logs                #nginx的日志文件夹
    
    drwxr-xr-x. 2 root   root    6 Mar 11 08:50 modules
    
    drwx------. 2 nobody root    6 Mar 11 08:51 proxy_temp
    
    drwxr-xr-x. 2 root   root   35 Mar 11 08:50 sbin                #存放nginx二进制命令的
    
    drwx------. 2 nobody root    6 Mar 11 08:51 scgi_temp
    
    drwx------. 2 nobody root    6 Mar 11 08:51 uwsgi_temp
    

    5.启动淘宝nginx

    ./nginx 
    

    6.添加linux的PATH变量,快捷使用nginx命令

    echo $PATH  
    
    PATH="/opt/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/tnginx220/sbin"
    
    永久添加变量环境:
    
     vim ~/.bash_profile
    
    修改/etc/profile文件,通过vi或vim增加变量
    

    nginx的主配置文件nginx.conf

    http内核模块
    
    //公共的配置定义在http{}
    
    http {  //http层开始
    
    ...    
    
        //使用Server配置网站, 每个Server{}代表一个网站(简称虚拟主机)
    
        'server' {
    
            listen       80;        //监听端口, 默认80
    
            server_name  localhost; //提供服务的域名或主机名
    
            access_log host.access.log  //访问日志
    
            //控制网站访问路径
    
            'location' / {
    
                root   /usr/share/nginx/html;   //存放网站代码路径
    
                index  index.html index.htm;    //服务器返回的默认页面文件
    
            }
    
            //指定错误代码, 统一定义错误页面, 错误代码重定向到新的Locaiton
    
            error_page   500 502 503 504  /50x.html;
    
        }
    
        ...
    
        //第二个虚拟主机配置
    
        'server' {
    
        ...
    
        }
    
        
    
        include /etc/nginx/conf.d/*.conf;  //包含/etc/nginx/conf.d/目录下所有以.conf结尾的文件
    
    }   //http层结束
    

    基于域名的多虚拟主机实战

    一个服务器上,可以运行两个乃至多个网站

    注意: 防火墙端口问题

    1.环境准备,准备好2个域名 ,这里是模拟的本地域名解析 ,找到hosts文件
    由于我们是想配置windows,可以访问不同的 域名,因此配置windows的hosts

    	192.168.11.65  dnf.com 
    
    	192.168.11.65  xiaohua.com
    
      编辑文件 C:WindowsSystem32driversetchosts
    写入
    

    2.配置nginx支持多虚拟主机

    修改nginx.conf 修改2个server虚拟主机的配置
    
    dnf的虚拟主机
    
    server {
    
        listen 80;
    
        server_name  dnf.com;
    
        # 当我们访问s17dnf.com:80/的时候,就进入这个虚拟主机,且找到这个location,进行网站资源分配
    
        location / {
    
            root /opt/s17dnf/;
    
            index index.html;
    
        }
    
    }
    
    第二个虚拟主机,s17校花网
    
    server{
    
        listen 80;
    
        server_name  xiaohua.com;
    
        
    
        location / {
            root /opt/s17xiaohua/;
            index index.html;
        }
    
    }
    
    分别修改两个网址的根目录数据
    
    mkdir -p /opt/{s17dnf,s17xiaohua}
    
    分别在/opt/s17dnf/创建index.html 
    
    /opt/s17xiaohua/创建index.html  
    

    3.修改完配置文件,检测语法

    nginx -t  
    

    4.平滑加载nginx(不重启nginx,重新读取配置文件)

    nginx -s reload  
    

    nginx的访问日志功能

    编辑 nginx.conf

    打开注释

    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;
    
    ...
    

    网站的404页面优化

    1.编辑nginx.conf ,配置如下:

    server {
        listen       80;
        server_name  s17dnf.com;
    
        #charset koi8-r;
    
        #access_log  logs/host.access.log  main;
    
        location / {
            root   /opt/s17dnf;
            index  index.html index.htm;
        }
        #打开这个参数的配置,开启错误页面  
        error_page  404           /404.html;
        error_page  401 402 403           /403.html;
    	}
    

    2.编辑/opt/s17dnf下 HTML文件

    拒绝某些ip访问

     location / {
    
                deny  你想限制的ip;
    
                root   /opt/s17dnf;
    
                index  index.html index.htm;
    
            }
    

    nginx的反向代理

    nginx反向代理的实现

    1.实验环境准备

    192.168.11.229   真实资源服务器,模拟django       ,理解为房东的房屋资源 
    
    192.168.11.136   nginx代理服务器                 ,理解为 房屋中介  
    

    2.思路
    我们作为客户端,访问 代理服务器, ,代理服务器,将资源服务器上的东西,进行返回

    3.配置 资源服务器

    192.168.11.229  s17dnf.com   
    

    4.配置代理服务器

    192.168.11.136 
    
    修改192.168.11.136这台机器的nginx配置文件,开启反向代理
    配置nginx.conf的server{}如下
    
        server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            server_name  _;
    
    		location / {
    		        #反向代理参数,当我们请求192.168.11.136:80/的时候,进入这里server,然后location进行资源分配 
    		            proxy_pass   http://192.168.11.229;     #就是间接的访问了 192.168.11.229:80/
    		        }
    		
    		   } 
    

    nginx负载均衡简单实现

    思路介绍:

    nginx.conf>http>定义一个负载均价池

    upstream  myserver  {
    
    server   192.168.11.229;
    
    server   192.168.11.xx;  
    
    }
    

    nginx.conf>http>通过反向代理转发

            server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            server_name  _;
    
          
    
            location / {
            #反向代理参数,当我们请求192.168.11.136:80/的时候,进入这里server,然后location进行资源分配 
                proxy_pass   myserver;     #就是间接的访问了 192.168.11.229:80/
            }
    
       } 
    

    配置nginx负载均衡:

    环境准备,三台服务器

    三台机器都是通过nginx实现的

    192.168.11.136  反向代理服务器  
    
    192.168.11.229   资源服务器1    这个机器是返回的dnf页面 
    
    192.168.11.176   资源服务器2    这个配置的是 index.html  来了老弟
    

    1.配置反向代理服务器 192.168.11.136

    修改nginx.conf如下参数
    
    定义负载均衡池
    
    upstream s17server {
    
    server 192.168.11.229;
    
    server 192.168.11.176;
    
    }
    
            #转发请求给负载均衡池
            location / {
                proxy_pass   http://s17server;
            }
    

    2.此时通过负载均衡器 192.168.11.136,进行访问测试,默认是轮询机制

    3.upstream分配策略

    weight 权重

    upstream django {
           server 10.0.0.10:8000 weight=5;
           server 10.0.0.11:9000 weight=10;#这个节点访问比率是大于8000的
    }
    

    ip_hash

    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器
    upstream django {
        ip_hash;
           server 10.0.0.10:8000;
           server 10.0.0.11:9000;
    }
    

    backup

    在非backup机器繁忙或者宕机时,请求backup机器,因此机器默认压力最小
    
    upstream django {
           server 10.0.0.10:8000 weight=5;
           server 10.0.0.11:9000;
           server node.oldboy.com:8080 backup;
    }
  • 相关阅读:
    hash表学习笔记
    【学习笔记-集合】HashMap 源码浅析
    java 同步
    学习SpringBoot了
    记录一些好的 学习网站
    Idea 的页面布局设定,tomcat及普通web项目设定
    Spring 札记
    java面试题(基础+非基础)[不定期更新]
    maven 使用
    ant 生成报告时报错,Errors while applying transformations: Fatal error during transformation
  • 原文地址:https://www.cnblogs.com/konghui/p/10533680.html
Copyright © 2020-2023  润新知