• nginx基础


    nginx基础

    1、Nginx简介(反向代理服务器,可以做负载均衡策略)
    它属于应用层程序 处理动态网页 ,减轻网站压力
    nginx优点:占有内存少,高并发、对网络依赖性比较强
    Nginx(engine x)专为性能优化而开发的开源软件,是HTTP、反向代理、邮件代理、TCP/UDP协议代理软件,端口指向HTTP,邮件代理,
    由俄罗斯的作者Igor Sysoev开发,其最知名的优点是它的稳定性和低系统资源消耗(硬件资源占用较低),
    以及对HTTP并发连接的高处理能力(单台物理服务器可支持30000~50000个并发请求),是一个轻量级WEB服务器软件。
    正因为如此,大量提供社交网站、新闻资讯、电子商务以及虚拟主机等服务的企业纷纷选择Ngnix来提供WEB服务。
    如新浪,淘宝(Tengine),京东,金山,网易,腾讯,百度文库,51cto,人人网等。
    2、Nginx版本:
    社区版 www.nginx.org
    企业版 www.nginx.com(被F5收购)
    tengine tengine.taobao.org
    3、部署Nginx软件
    1)安装支持软件:
    Nginx的配置及运行需要pcre、zlib等软件包的支持,因此应预先安装这些软件的开发包(devel)
    systemctl stop firewalld
    iptables-F
    setenforce 0
    yum -y install pcre-devel   zlib-devel  openssl-devel
    yum -y install gcc gcc-c++ make
    2)创建运行用户、组:
    Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限,增加灵活性、降低安全风险。
    如:创建一个名为nginx的用户,不建立宿主目录,也禁止登录到shell环境。
    useradd -M -s /sbin/nologin nginx
    3)释放nginx源码包:
    tar xfnginx-1.14.2.tar.gz -C /usr/src/
    4)预配置编译安装:
    cd /usr/src/nginx-1.14.2/
    ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module && make && make install
             ~make 编译就是将./configure文件进行存放
    注:配置前可以参考:./configure --help给出说明
    --prefix   //设定Nginx的安装目录
    --user和--group //指定Nginx运行用户和组
    --with-http_stub_status_module   //启用http_stub_status_module模块以支持状态统计
    --with-http_ssl_module   //启用SSL模块
    --with-http_flv_module   //启用FLV模块,提供寻求内存使用基于时间的偏移量文件
    为了使Nginx服务器的运行更加方便,可以为主程序nginx创建链接文件,以便管理员直接执行nginx命令就可以调用Nginx的主程序。
    ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/     ///链接到/usr/local/bin/nginx
    ll /usr/local/bin/nginx
    运行服务
    nginx 
    netstat -lnpt  //tcp端口,80端口 ,所以apache服务不能打开
    -------------------------------注意---------
    ll /usr/local/nginx/conf/nginx.conf
    开服务之前先对文件进行配置检查
    nginx -t  //作用帮我们查看是否已经加载文件以及检测文件格式是否有问题,但无法确定文件值是多少
    正常情况下会显示 
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    5)Nginx的运行控制:
    "-t"对配置文件进行检查,"-c"选项来指定路径。
    nginx -t
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    ======注意====
    -c 用来指定自定义安装路径,如未设置自定义路径,不用进行-c指定,系统会自动默认。
    6)启动、停止Nginx:
    直接运行nginx即可启动nginx服务器,这种方式将使用默认的配置文件,若要改用其他配置文件需要添加-c配置文件路径选项来指定路径
    注:若服务器中已安装有httpd等其他WEB服务软件,应采取措施(修改端口,停用或卸载其他软件)避免部突。
    nginx      //运行nginx服务
    netstat -anpt |grep :80
    tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6810/nginx: master
    7)在浏览器中输入IP地址查看页面
    主程序Nginx支持标准的进程信号,通过kill或者killall命令传送
    HUP      重载配置    等同于-1
    QUIT     退出进程    等同于-3
    KILL      杀死进程    等同于-9
    killall -s HUP nginx
    killall -s QUIT nginx
    netstat -anpt | grep :80
    当Nginx进程运行时,PID号默认存放在/usr/local/nginx/logs/目录下的nginx.pid文件中,因此若改用kill命令,也可以根据nginx.pid文件中的PID号来进行控制。
    为了使Nginx服务的启动、停止、重载等操作更加方便,可以编写Nginx服务脚本,并使用chkconfig和systemctl工具来进行管理,也更加符合RHEL系统的管理习惯。
    [root@nginx~]# vim /etc/init.d/nginx
    #!/bin/bash
    # chkconfig: 2345 99 20   ////2345是系统的运行级别 ,如果启动则第99个开启,如果关闭则第20个关闭
    # description: Nginx Server Control Script
    PROG="/usr/local/nginx/sbin/nginx"     ##命令路径
    PIDF="/usr/local/nginx/logs/nginx.pid"   ## pid进程
    case "$1" in
    start)
     $PROG
    ;;
    stop)
     kill -s QUIT $(cat $PIDF)
    ;;
    restart)
     $0 stop
     $0 start
    ;;
    reload)
     kill -s HUP $(cat $PIDF)
    ;;
    *)
     echo "Usage: $0 {start|stop|restart|reload}"
     exit 1   #退出,并定义返回值为1  证明执行失败
    esac
    exit 0  # 表示执行成功
    [root@nginx~]#chmod +x /etc/init.d/nginx   //加执行权限
    [root@nginx~]#chkconfig --add nginx
    [root@nginx~]#chkconfignginx on
    [root@nginx~]#chkconfig --list nginx
    nginx 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
    这样就可以通过nginx脚本来启动、停止、重启、重载Nginx服务器了。
    4、nginx.conf文件结构
    在Nginx服务器的主配置文件nginx.conf中,包括全局配置、I/O事件配置、HTTP配置这三大块内容,配置语句的格式为"关键字 值;"(末尾以分号表示结束),以"#"开始的部分表示注释。
    ps aux | grep nginx
    master表示主进程    超级用户执行root
    worker表示工作进程      nginx用户执行
    原理:工作机制一般由master来接收用户请求,然后转交给worker进行处理
    1)全局配置
    由各种配置语句组成,不使用特定的界定标记。全局配置部分包括运行用户、工作进程数、错误日志、PID存放位置等基本设置。
    常用配置项:
    user nginx [nginx]; //运行用户,组,默认为nobody。一般要手动添加一下,也可以在make 编译前的时候进行指定
    worker_processes 2;//指定nginx启动的工作进程数量,建议按照cpu数目来指定,一般和CPU核心数相等。
    worker_cpu_affinity 01 10;
                          或者         0001 0010 0100 1000
           或者         00000001 00000010即将两个进程分配到连个CPU,当然也可以写多个,或者将一个进程分配到多个CPU
                         //为每个进程分配cpu核心
    worker_rlimit_nofile 102400; //是指当一个nginx进程打开的最多文件数目,即一个进程能开多少个文件,所以最好与ulimit -n的值保持一致。(通过"ulimit–n 数值"可以修改打开的最多文件数目)
    可以执行以下命令查看一个nginx进程打开的最多文件数目
      命令格式:ulimit -n  数值
    eg:  ulimit -n 10990  //修改打开最多的文件数目
    命令格式:ulimit -u   数值  //最大用户进程数
    ---------------------------------
    error_log logs/error.log; //全局错误日志文件的位置
    pid logs/nginx.pid; //PID文件的位置
    2)I/O事件配置:
    使用"events {}"界定标记,用来指定Nginx进程的I/O响应模型,每个进程的连接数等设置
    events {
     use epoll; //使用epoll模型,对于2.6以上的内核,建议使用epoll模型以提高性能
     worker_connections 4096; //指定工作连接进程,每个进程允许的最多连接数(默认为1024)
    }
    3)HTTP配置
    使用"http{}"界定标记,包括访问日志、HTTP端口、网页目录、默认字符集、连接保持、以
    及虚拟主机、PHP解析等一系列设置。其中大部分配置语句包含在子界定标记"server {}"内。
    http {
     include mime.types;
     default_type application/octet-stream;
     log_format main '$remote_addr - $remote_user [$time_local] "$request" '    //定义日志输出格式,输出名字为main
                '$status $body_bytes_sent "$http_referer" '     //$status $body_bytes_sent 指定主体大小,$http_referer指定来源链接
                '"$http_user_agent" "$http_x_forwarded_for"';    //$http_user_agent指定用户客户端浏览器相关信息 $http_x_forwarded_for  表示客户端IP
    access_log logs/access.log main; //访问日志位
    sendfile on; //支持文件发送(下载)
    keepalive_timeout 65; //连接保持超时
    server { //web服务的监听配置
     listen 80; //监听地址及端口(IP:PORT)
     server_name www.crushlinux.com; //网站名称(FQDN)域名
     charset utf-8; //网页的默认字符集
     location / { //跟目录配置
      root html; //网站根目录的位置安装位置的html中
     index index.html index.htm; //默认首页(索引页)
    }
     error_page 500 502 503 504 /50x.html; //内部错误的反馈页面
     location = /50x.html { //错误页面配置
     root html;
     }
     }

    保存后退出,重新加载
    也可以用这个命令killall -HUP nginx
    5、状态统计模块
    Nginx内置了HTTP_STUB_STATUS状态统计模块,用来反馈当前的WEB访问情况。
    配置编译参数时可添加--with-http_stub_stastus_module来启用此模块。
    要使用Nginx的状态统计功能,除了启用内建模块以外,还需要修改nginx.conf文件,
    指定访问位置并打开stub_status配置。在http{}配置的server{}子配置内添加如下配置项
    [root@nginx~]# vim /usr/local/nginx/conf/nginx.conf
    location /status {
     stub_status on; //打开状态统计功能
     access_log off; //关闭此位置的日志记录
    }
    [root@nginxconf]#systemctl restart nginx
    浏览器访问 http://192.168.200.111/status
      Active connections //表示当前活跃的连接数,第三行的三个数字表示Nginx当前总共处理了3个连接,成功创建3次握手,总共处理了12个请求。
      Reading //表示Nginx读取到客户端Header信息数,
      Writing //表示Nginx返回给客户端的Header信息数
      Waiting //表示Nginx已经处理完,正在等候下一次请求指令时的驻留连接数。
    6、虚拟主机应用
    基于域名的虚拟主机 :一个IP地址对应多个域名,不同域名就是不同的web站点,内容不一样
    基于IP虚拟主机:服务器由多个IP地址,不同IP就是不同的web站点,内容不一样
    基于端口 虚拟主机:服务器只有一个IP地址,通过不同的端口实现不同的web站点,内容不一样
    使用Nginx搭建虚拟主机服务器时,每个虚拟WEB站点拥有独立的"server {}"配置段,各自监听的IP地址、端口号可以单独指定,当然网站名称也是不同的。
    虚拟主机可以
    例如:要创建两个站点www.crushlinux.com和www.cloud.com为两个虚拟WEB主机分别建立根目录,并准备测试首页
    [root@nginx~]#mkdir /usr/local/nginx/html/crushlinux
    [root@nginx~]#mkdir /usr/local/nginx/html/cloud
    [root@nginx~]# echo "<h1>www.crushlinux.com</h1>" >/usr/local/nginx/html/crushlinux/index.html
    [root@nginx~]# echo "<h1>www.cloud.com</h1>" > /usr/local/nginx/html/cloud/index.html
    [root@nginx~]# vim /usr/local/nginx/conf/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;
     sendfile on;
     keepalive_timeout 65;
    server {
      listen   (192.168.200.111):80;
     server_name www.crushlinux.com;
     charset utf-8;
     access_log logs/crushlinux.access.log main;
     location / {
      root html/crushlinux;
      index index.html index.htm;
      }
     }
    server {
     listen (192.168.200.100):80;
     server_name www.cloud.com;
     charset utf-8;
     access_log logs/cloud.access.log main;
     location / {
      root html/cloud;
      index index.html index.htm;
      }
     }
    }
    [root@nginx~]#systemctl restart nginx
    [root@nginx~]# vim /etc/hosts
    192.168.200.111 www.crushlinux.com
    192.168.200.111 www.cloud.com
    在windows测试机中编辑hosts文件
    在C:WindowsSystem32driversetchostos文件中添加以下内容,或者在桌面上重新建立新的hosts文件进行覆盖
    192.168.200.111 www.crushlinux.com
    192.168.200.111 www.cloud.com
    虚拟主机访问测试
    [root@nginx~]#elinks --dump http://www.crushlinux.com
    www.crushlinux.com
    [root@nginx~]#elinks --dump http://www.cloud.com
    www.cloud.com
    最后在浏览器中进行测试
    =========================================
  • 相关阅读:
    nyoj_216_A problem is easy_201312051117
    nyoj_676_小明的求助_201312042142-2
    C# 堆和栈的区别?
    DataReader和DataSet区别
    SQLSERVER2008R2正确使用索引
    SQL Profiler工具简介
    (转)非常完善的Log4net详细说明
    SQL语句优化技术分析
    HashTable、HashSet和Dictionary的区别
    使用Nuget发布自己的类库包
  • 原文地址:https://www.cnblogs.com/elin989898/p/11844846.html
Copyright © 2020-2023  润新知