精华内容
下载资源
问答
  • nginx

    万次阅读 多人点赞 2019-02-28 16:39:12
    nginx1. nginx简介2. nginx的特性与优点2.1 nginx的特性2.2 nginx的优点3. nginx反向代理3.1 反向代理的作用3.2 正向代理和反向代理的区别4. nginx的安装与配置4.1 nginx的安装4.2 nginx安装后的配置 1. nginx简介 ...

    1. nginx简介

    nginx(发音同engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。

    nginx的特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

    2. nginx的特性与优点

    2.1 nginx的特性

    • Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接
    • 高度的模块化和自由软件许可证是的第三方模块层出不穷(这是个开源的时代啊~)
    • Nginx是一个跨平台服务器,可以运行在Linux,Windows,FreeBSD,Solaris, AIX,Mac OS等操作系统上
    • 这些优秀的设计带来的极大的稳定性

    2.2 nginx的优点

    • 高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2-3万并发连接数
    • 内存消耗少:在3万并发连接下,开启的10个nginx进程才消耗150M内存(15M*10=150M)
    • 配置文件非常简单:风格跟程序一样通俗易懂
    • 成本低廉:nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币
    • 支持Rewrite重写规则:能够根据域名、URL的不同,将HTTP请求分到不同的后端服务器群组
    • 内置的健康检查功能:如果Nginx Proxy后端的某台Web服务器宕机了,不会影响前端访问
    • 节省带宽:支持GZIP压缩,可以添加浏览器本地缓存的Header头
    • 稳定性高:用于反向代理,宕机的概率微乎其微
    • 模块化设计:模块可以动态编译
    • 外围支持好:文档全,二次开发和模块较多
    • 支持热部署:可以不停机重载配置文件
    • 支持事件驱动、AIO(AsyncIO,异步IO)、mmap(Memory Map,内存映射)等性能优化

    3. nginx反向代理

    多个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色。

    客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。

    反向代理,“它代理的是服务端”,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。

    3.1 反向代理的作用

    • 保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
    • 负载均衡,通过反向代理服务器来优化网站的负载

    3.2 正向代理和反向代理的区别

    • 在正向代理中,Proxy和Client同属于一个LAN(图中方框内),隐藏了客户端信息;
    • 在反向代理中,Proxy和Server同属于一个LAN(图中方框内),隐藏了服务端信息;

    4. nginx的安装与配置

    4.1 nginx的安装

    //创建系统用户nginx

    [root@xaii ~]# groupadd -r nginx
    [root@xaii ~]# useradd -r -M -s /sbin/nologin -g nginx nginx
    

    //安装依赖环境

    [root@xaii ~]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++
    暗转过程省略......
    [root@xaii ~]# yum -y groups mark install 'Development Tools'
    安装过程省略......
    

    //创建日志存放目录

    [root@xaii ~]# mkdir -p /var/log/nginx
    [root@xaii ~]# chown -R nginx.nginx /var/log/nginx/
    

    //下载nginx,下载过程省略,存放至/usr/src目录下

    [root@xaii src]# wget http://nginx.org/download/nginx-1.12.0.tar.gz
    [root@xaii ~]# ls /usr/src/ |grep nginx
    nginx-1.12.0.tar.gz
    

    //编译安装nginx

    [root@xaii src]# tar xf nginx-1.12.0.tar.gz 
    [root@xaii src]# cd nginx-1.12.0
    
    [root@xaii nginx-1.12.0]# ./configure \
     --prefix=/usr/local/nginx \
     --user=nginx \
     --group=nginx \
     --with-debug \
     --with-http_ssl_module \
     --with-http_realip_module \
     --with-http_image_filter_module \
     --with-http_gunzip_module \
     --with-http_gzip_static_module \
     --with-http_stub_status_module \
     --http-log-path=/var/log/nginx/access.log \
     --error-log-path=/var/log/nginx/error.log
    //安装过程省略....
    
    [root@xaii nginx-1.12.0]# make -j $(grep 'processor' /proc/cpuinfo | wc -l) && make install
    //-j是指定多少内核
    //过程省略......
    

    4.2 nginx安装后的配置

    //添加环境变量

    [root@xaii ~]# vim /etc/profile.d/nginx.sh
    [root@xaii ~]# cat /etc/profile.d/nginx.sh 
    export PATH=/usr/local/nginx/sbin:$PATH
    [root@xaii ~]# . /etc/profile.d/nginx.sh
    

    //服务控制方式,使用nginx命令

    -t  //检查配置文件语法
    [root@xaii ~]# 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
    
    
    -v  //输出nginx的版本
    root@xaii ~]# nginx -v
    nginx version: nginx/1.12.0
    
    -c  //指定配置文件的路径
    需要拷贝两个文件:nginx.conf和mime.type至新的路径
    [root@xaii conf]# cp -a nginx.conf /opt/nginx/
    [root@xaii conf]# cp -a mime.types /opt/nginx
    [root@xaii ~]# ps -ef |egrep -v 'grep'|grep nginx
    root       4040      1  0 00:03 ?        00:00:00 nginx: master process nginx -c /optnginx/nginx.conf
    nginx      4041   4040  0 00:03 ?        00:00:00 nginx: worker process
    可以看到,现在用的配置文件为/opt/nginx/nginx.conf
    
    -s  //发送服务控制信号,可选值有{stop|quit|reopen|reload}
    

    //nginx和apache不能同时开启

    //因为apache和nginx的端口都是80,当apache服务开启时,无法开始nginx服务
    
    [root@xaii ~]# ss -antlp|grep 80
    LISTEN     0      128         :::80                      :::*                   users:(("httpd",pid=4081,fd=4),("httpd",pid=4080,fd=4),("httpd",pid=4079,fd=4),("httpd",pid=4078,fd=4),("httpd",pid=4077,fd=4),("httpd",pid=4076,fd=4))
        
    [root@xaii ~]# nginx
    nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
    nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
    nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
    nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
    ^C
    

    //关闭apache服务,再开启nginx服务

    [root@xaii ~]# apachectl stop
    [root@xaii ~]# nginx
    [root@xaii ~]# ss -antlp|grep 80
    LISTEN     0      128          *:80                       *:*                   users:(("nginx",pid=4069,fd=6),("nginx",pid=4068,fd=6))
    

    4.3利用脚本控制nginx服务的开启,重载,和关闭

    #! /bin/bash
    
    nginx=/usr/local/nginx/sbin/nginx
    conf_path=/opt/nginx/nginx.conf
    
    case $1 in
    start)
            $nginx -c $conf_path
    if [ $? -eq 0 ];then
            echo 'nginx start sucessful'
    else
            echo 'nginx start faild'
    fi
            ;;
    
    
    restart)
            $nginx -s stop
            $nginx -c $conf_path
    if [ $? -eq 0 ];then
            echo 'nginx restart sucessful'
    else
            echo 'nginx restart faild'
    fi
            ;;
    
    
    stop)
            $nginx -s stop 2>/dev/null
    if [ $? -eq 0 ];then
            echo 'nginx is off'
    else
            echo 'nginx error'
    fi
            ;;
    esac
    

    5. nginx的配置文件详解

    主配置文件:/usr/local/nginx/conf/nginx.conf

    • 默认启动nginx时,使用的配置文件是:安装路径/conf/nginx.conf文件
    • 可以在启动nginx时通过-c选项来指定要读取的配置文件

    5.1 nginx.conf配置详解

    nginx.conf的内容分为以下几段:

    • main配置段:全局配置段。其中main配置段中可能包含event配置段
    • event {}:定义event模型工作特性
    • http {}:定义http协议相关的配置

    支持使用变量:

    • 内置变量:模块会提供内建变量定义
    • 自定义变量:set var_name value

    5.2 用于调试、定位问题的配置

    • 参数daemon {on|off}; //是否以守护进程方式运行nginx,调试时应设置为off
    • master_process {on|off}; //是否以master/worker模型来运行nginx,调试时可以设置为off
    • error_log 位置 级别; //配置错误日志

    5.3 正常运行必备的配置参数

    • user USERNAME [GROUPNAME]; //指定运行worker进程的用户和组

    • pid /path/to/pid_file; //指定nginx守护进程的pid文件

    • worker_rlimit_nofile number; //设置所有worker进程最大可以打开的文件数,默认为1024(文件系统最大打开的文件数为65535)

        //此设置为nginx的配置,还需配置系统的文件
        [root@nginx ~]# head -3 /usr/local/nginx/conf/nginx.conf
        user  nginx;(初始为nobody)
        worker_processes  4;(cpu核心数)
        worker_rlimit_nofile 30000;(默认为1024,最大为65535,我们设置为30000)
        [root@nginx ~]# nginx -s reload
      
      
        //修改系统的硬限制和软限制,都设置为最大的65535
        [root@nginx ~]# vim /etc/security/limits.conf 
        [root@nginx ~]# tail -4 /etc/security/limits.conf 
        * soft nofile 65535
        * hard nofile 65535
      
        # End of file
      
    • worker_rlimit_core size; //指明所有worker进程所能够使用的总体的最大核心文件大小,保持默认即可

    5.4 优化性能的配置参数

    • worker_processes n; //启动n个worker进程,这里的n为了避免上下文切换,通常设置为cpu总核心数-1或等于总核心数
    • worker_cpu_affinity cpumask …; //将进程绑定到某cpu中,避免频繁刷新缓存
      • //cpumask:使用8位二进制表示cpu核心,如:
        0000 0001 //第一颗cpu核心
        0000 0010 //第二颗cpu核心
        0000 0100 //第三颗cpu核心
        0000 1000 //第四颗cpu核心
        0001 0000 //第五颗cpu核心
        0010 0000 //第六颗cpu核心
        0100 0000 //第七颗cpu核心
        1000 0000 //第八颗cpu核心
    • timer_resolution interval; //计时器解析度。降低此值,可减少gettimeofday()系统调用的次数
    • worker_priority number; //指明worker进程的nice值

    //具体配置:

    [root@nginx ~]# head /usr/local/nginx/conf/nginx.conf |grep worker_
    worker_processes  4;(cpu核心数为4个)
    worker_rlimit_nofile 30000;
    worker_cpu_affinity 00000001 00000010 00000100 00001000;(所以这里也只能写4个)
    [root@nginx ~]# nginx -s reload
    

    5.5 事件相关的配置:event{}段中的配置参数

    • accept_mutex {off|on}; //master调度用户请求至各worker进程时使用的负载均衡锁;on表示能让多个worker轮流地、序列化地去响应新请求

        [root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf	
        	  events {
            worker_connections  1024;
            accept_mutex on;(添加此内容)
        }
      
    • lock_file file; //accept_mutex用到的互斥锁锁文件路径

        pid        logs/nginx.pid;
        lock_file  logs/nginx.lock;(添加此内容,写在event外部,顶格写)
      
    • use [epoll | rtsig | select | poll]; //指明使用的事件模型,建议让nginx自行选择

    • worker_connections #; //每个进程能够接受的最大连接数

        events {
        worker_connections  1024;
        accept_mutex on;
      

      }

    注意:

    worker_connections(连接数) * worker_processes(cpu核心数) <=30000
    

    5.6 网络连接相关的配置参数

    • keepalive_timeout number; //长连接的超时时长,默认为65s

        keepalive_timeout  65;
      
    • keepalive_requests number; //在一个长连接上所能够允许请求的最大资源数

        keepalive_requests 100;(配置文件中没有设置,默认为100,看自己的业务设置)
      
    • keepalive_disable [msie6|safari|none]; //为指定类型的UserAgeng禁用长连接

    • tcp_nodelay on|off; //是否对长连接使用TCP_NODELAY选项,为了提升用户体验,通常设为on

        tcp_nodelay on;(默认为on)
      
    • client_header_timeout number; //读取http请求报文首部的超时时长

    • client_body_timeout number; //读取http请求报文body部分的超时时长

    • send_timeout number; //发送响应报文的超时时长

    5.7 fastcgi的相关配置参数

    LNMP:php要启用fpm模型
    配置示例如下:

    location ~ \.php$ {
      root html;
      fastcgi_pass 127.0.0.1:9000;      //定义反向代理
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
      include fastcgi_params;
    }
    

    6. 搭建lnmp架构

    6.1 环境:

    nginx端:192.168.157.69
    php、mysql、zabbix端:192.168.157.59

    6.2 php安装

    详情请看:php安装

    6.3 mysql安装

    详情请看:mysql安装

    6.4 php端配置

    //修改配置文件并重启php服务

    [root@xaii ~]# tail -2 /usr/local/php7/etc/php-fpm.conf
    
    listen = 192.168.157.59:9000	(//添加此内容)
    listen.allowed_clients = 192.168.157.69	(//添加此内容)
    
    [root@xaii ~]# service php-fpm restart 
    Gracefully shutting down php-fpm . done
    Starting php-fpm  done
    
    [root@xaii ~]# ss -antl |grep 9000
    LISTEN     0      128    192.168.157.59:9000                     *:*        
    

    6.5 nginx端配置

    //修改配置文件并新加载nginx服务

    location / {
    root   html;
    index  index.php(//添加此内容) index.html index.htm;
        }
    
    
    
     location ~ \.php$ {
     root           /var/www/zabbix;(php端的zabbix目录)
     fastcgi_pass   192.168.157.59:9000; (指向php端ip地址)
     fastcgi_index  index.php;
     fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
     include        fastcgi_params;
        }
    
    [root@nginx html]# nginx -s reload
    

    6.6 两端都开启nfs服务,将php端的zabbix目录共享至nginx端

    //php端nfs配置:

    [root@xaii ~]# yum -y install nfs-utils
    [root@xaii ~]# systemctl start nfs
    [root@xaii ~]# echo '/var/www/zabbix *(ro)' > /etc/exports
    [root@xaii ~]# chmod 777 /var/www/zabbix/
    [root@xaii ~]# systemctl restart nfs-server
    

    //nginx端nfs配置,将php端zabbix目录挂载到本地的/usr/local/nginx/html/

    [root@nginx ~]# yum -y install nfs-utils
    [root@nginx ~]# systemctl start nfs
    [root@nginx ~]# mount -t nfs 192.168.157.59:/var/www/zabbix /usr/local/nginx/html(临时挂载)
    [root@nginx ~]# df -Th
    文件系统                                       类型      容量  已用  可用 已用% 挂载点
    /dev/mapper/rhel-root                          xfs        17G  1.5G   16G    9% /
    devtmpfs                                       devtmpfs  901M     0  901M    0% /dev
    tmpfs                                          tmpfs     912M     0  912M    0% /dev/shm
    tmpfs                                          tmpfs     912M  8.6M  904M    1% /run
    tmpfs                                          tmpfs     912M     0  912M    0% /sys/fs/cgroup
    /dev/loop0                                     iso9660   3.8G  3.8G     0  100% /mnt
    /dev/sda1                                      xfs      1014M  143M  872M   15% /boot
    tmpfs                                          tmpfs     183M     0  183M    0% /run/user/0
    192.168.157.59:/usr/local/apache/htdocs/zabbix nfs4       17G  5.9G   12G   35% /usr/local/nginx/html
    [root@nginx ~]# nginx -s reload
    

    6.7 验证

    //输入192.168.157.69

    在这里插入图片描述

    //永久挂载

    [root@nginx ~]# vim /etc/fstab 
    192.168.157.59:/var/www/zabbix /usr/local/nginx/html nfs defaults,_netdev 0 0
    [root@nginx ~]# mount -a 
    [root@nginx ~]# df -Th
    文件系统                       类型      容量  已用  可用 已用% 挂载点
    /dev/mapper/rhel-root          xfs        17G  1.5G   16G    9% /
    devtmpfs                       devtmpfs  901M     0  901M    0% /dev
    tmpfs                          tmpfs     912M     0  912M    0% /dev/shm
    tmpfs                          tmpfs     912M  8.6M  904M    1% /run
    tmpfs                          tmpfs     912M     0  912M    0% /sys/fs/cgroup
    /dev/loop0                     iso9660   3.8G  3.8G     0  100% /mnt
    /dev/sda1                      xfs      1014M  143M  872M   15% /boot
    tmpfs                          tmpfs     183M     0  183M    0% /run/user/0
    192.168.157.59:/var/www/zabbix nfs4       17G  5.8G   12G   34% /usr/local/nginx/html
    

    7. nginx作为web服务器使用的配置:http{}段的配置参数

    http{…}:配置http相关,由ngx_http_core_module模块引入。nginx的HTTP配置主要包括四个区块,结构如下:

    http {//协议级别
      include mime.types;
      default_type application/octet-stream;
      keepalive_timeout 65;
      gzipon;
      upstream {//负载均衡配置
        ...
      }
      server {//服务器级别,每个server类似于httpd中的一个<VirtualHost>
        listen80;
        server_name localhost;
        location / {//请求级别,类似于httpd中的<Location>,用于定义URL与本地文件系统的映射关系
          root html;
          index index.html index.htm;
        }
      }
    }
    

    //http{}段配置指令:
    server {}:定义一个虚拟主机,示例如下:

    server {
      listen 80;
      server_name www.lizhao.com;(自己定义)
      root "/vhosts/web"; (html下网页的路径)
    }
    

    listen:指定监听的地址和端口:

    listen address[:port];
    listen port;
    
    • root path; 设置资源路径映射,用于指明请求的URL所对应的资源所在的文件系统上的起始路径

    • alias path; 用于location配置段,定义路径别名

    • index file; 默认主页面

    • error_page code […] [=code] URI | @name 根据http响应状态码来指明特用的错误页面,例如 error_page 404 /404_customed.html

    • [=code]:以指定的响应码进行响应,而不是默认的原来的响应,默认表示以新资源的响应码为其响应码,例如 error_page 404 =200 /404_customed.html

    location区段,通过指定模式来与客户端请求的URI相匹配:

    //功能:允许根据用户请求的URI来匹配定义的各location,匹配到时,此请求将被相应的location配置块中的配置所处理,例如做访问控制等功能
    

    例如:
    URL:https://www.baidu.com/?tn=sitehao123_15
    URI:www.baidu.com
    ?以前的是协议(https)+URI,?以后的是参数。

    //语法:location [ 修饰符 ] pattern {......}
    
    展开全文
  • Nginx

    2019-02-28 19:29:58
    nginx服务1. nginx简介2. nginx的特性与优点2.1 nginx的特性2.2 nginx的优点3. nginx的功能及应用类别3.1 nginx的基本功能3.2 nginx的扩展功能3.3 nginx的应用类别4. nginx的模块与工作原理4.14.25. nginx的安装与...

    1. nginx简介

    nginx(发音同engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。

    nginx由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引擎Rambler使用。

    第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

    nginx的特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

    2. nginx的特性与优点

    2.1 nginx的特性

    ginx是一个很牛的高性能Web和反向代理服务器,它具有很多非常优越的特性:

    • 在高连接并发的情况下,nginx是Apache服务器不错的替代品,能够支持高达50000个并发连接数的响应
    • 使用epoll and kqueue作为开发模型
    • nginx作为负载均衡服务器:nginx既可在内部直接支持和PHP程序对外进行服务,也可支持作为HTTP代理服务器对外进行服务
    • nginx采用C进行编写,不论系统资源开销还是CPU使用效率都比Perlbal要好很多

    2.2 nginx的优点

    • 高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2-3万并发连接数
    • 内存消耗少:在3万并发连接下,开启的10个nginx进程才消耗150M内存(15M*10=150M)
    • 配置文件非常简单:风格跟程序一样通俗易懂
    • 成本低廉:nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币
    • 支持Rewrite重写规则:能够根据域名、URL的不同,将HTTP请求分到不同的后端服务器群组
    • 内置的健康检查功能:如果Nginx Proxy后端的某台Web服务器宕机了,不会影响前端访问
    • 节省带宽:支持GZIP压缩,可以添加浏览器本地缓存的Header头
    • 稳定性高:用于反向代理,宕机的概率微乎其微
    • 模块化设计:模块可以动态编译
    • 外围支持好:文档全,二次开发和模块较多
    • 支持热部署:可以不停机重载配置文件
    • 支持事件驱动、AIO(AsyncIO,异步IO)、mmap(Memory Map,内存映射)等性能优化

    3. nginx的功能及应用类别

    3.1 nginx的基本功能

    • 静态资源的web服务器,能缓存打开的文件描述符
    • http、smtp、pop3协议的反向代理服务器
    • 缓存加速、负载均衡
    • 支持FastCGI(fpm,LNMP),uWSGI(Python)等
    • 模块化(非DSO机制),过滤器zip、SSI及图像的大小调整
    • 支持SSL

    3.2 nginx的扩展功能

    • 基于名称和IP的虚拟主机
    • 支持keepalive
    • 支持平滑升级
    • 定制访问日志、支持使用日志缓冲区提高日志存储性能
    • 支持URL重写
    • 支持路径别名
    • 支持基于IP及用户的访问控制
    • 支持速率限制,支持并发数限制

    3.3 nginx的应用类别

    • 使用nginx结合FastCGI运行PHP、JSP、Perl等程序
    • 使用nginx作反向代理、负载均衡、规则过滤
    • 使用nginx运行静态HTML网页、图片
    • nginx与其他新技术的结合应用

    4. nginx的模块与工作原理

    nginx由内核和模块组成。其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。

    4.1 nginx的模块分类

    nginx的模块从结构上分为核心模块、基础模块和第三方模块

    • HTTP模块、EVENT模块和MAIL模块等属于核心模块
    • HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块属于基本模块
    • HTTP Upstream模块、Request Hash模块、Notice模块和HTTP Access Key模块属于第三方模块

    用户根据自己的需要开发的模块都属于第三方模块。正是有了如此多模块的支撑,nginx的功能才会如此强大

    nginx模块从功能上分为三类,分别是:

    • Handlers(处理器模块)。此类模块直接处理请求,并进行输出内容和修改headers信息等操作。handlers处理器模块一般只能有一个
    • Filters(过滤器模块)。此类模块主要对其他处理器模块输出的内容进行修改操作,最后由nginx输出
    • Proxies(代理器模块)。就是nginx的HTTP Upstream之类的模块,这些模块主要与后端一些服务比如fastcgi等操作交互,实现服务代理和负载均衡等功能

    nginx模块分为:核心模块、事件模块、标准Http模块、可选Http模块、邮件模块、第三方模块和补丁等

    • nginx基本模块:所谓基本模块,指的是nginx默认的功能模块,它们提供的指令,允许你使用定义nginx基本功能的变量,在编译时不能被禁用,包括:
    • 核心模块:基本功能和指令,如进程管理和安全。常见的核心模块指令,大部分是放置在配置文件的顶部
    • 事件模块:在Nginx内配置网络使用的能力。常见的events(事件)模块指令,大部分是放置在配置文件的顶部
    • 配置模块:提供包含机制

    4.2 nginx的工作原理

    nginx的模块直接被编译进nginx,因此属于静态编译方式。

    启动nginx后,nginx的模块被自动加载,与Apache不一样,首先将模块编译为一个so文件,然后在配置文件中指定是否进行加载。

    在解析配置文件时,nginx的每个模块都有可能去处理某个请求,但是同一个处理请求只能由一个模块来完成。

    nginx的进程架构:
    启动nginx时,会启动一个Master进程,这个进程不处理任何客户端的请求,主要用来产生worker线程,一个worker线程用来处理n个request。
    在这里插入图片描述
    下图展示了nginx模块一次常规的HTTP请求和响应的过程
    在这里插入图片描述
    下图展示了基本的WEB服务请求步骤

    在这里插入图片描述

    5. nginx的安装与配置

    5.1 nginx的安装

    //创建系统用户nginx
    [root@localhost ~]# groupadd -r nginx
    [root@localhost ~]# useradd -r -M -s /sbin/nologin -g nginx nginx
    //安装依赖环境
    [root@localhost ~]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++
    //安装开发工具
    [root@localhost ~]# yum groups list
    已加载插件:product-id, search-disabled-repos, subscription-manager
    This system is not registered with an entitlement server. You can use subscription-manager to register.
    file:///mnt/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /mnt/repodata/repomd.xml"
    正在尝试其它镜像。
    可用的环境分组:
       最小安装
       基础设施服务器
       计算节点
       文件及打印服务器
       Cinnamon 桌面环境
       MATE 桌面环境
       基本网页服务器
       虚拟化主机
       带 GUI 的服务器
       GNOME 桌面
       KDE Plasma Workspaces
       开发及生成工作站
    已安装的组:
       开发工具
    可用组:
       Cinnamon
       Fedora Packager
       Haskell
       MATE
       Milkymist
       TurboGears 应用程序构架
       Xfce
       传统 UNIX 兼容性
       兼容性程序库
       图形管理工具
       安全性工具
       控制台互联网工具
       教育软件
       智能卡支持
       电子实验室
       科学记数法支持
       系统管理
       系统管理工具
       通用桌面
    完成
    //创建日志存放目录
    [root@localhost ~]# mkdir -p /var/log/nginx
    [root@localhost ~]# chown -R nginx.nginx /var/log/nginx
    //解压nginx
    [root@localhost ~]# cd /usr/src/
    [root@localhost src]# tar -xf nginx-1.14.2.tar.gz
    //编译安装
    [root@localhost src]# cd nginx-1.14.2
    [root@localhost nginx-1.14.2]# ./configure \
    > --prefix=/usr/local/nginx \
    > --user=nginx \
    > --group=nginx \
    > --with-debug \
    > --with-http_ssl_module \
    > --with-http_realip_module \
    > --with-http_image_filter_module \
    > --with-http_gunzip_module \
    > --with-http_gzip_static_module \
    > --with-http_stub_status_module \
    > --http-log-path=/var/log/nginx/access.log \
    > --error-log-path=/var/log/nginx/error.log
    
    [root@localhost nginx-1.14.2]# make
    [root@localhost nginx-1.14.2]# make install
    

    5.2 nginx安装后配置

    //配置环境变量
    [root@localhost ~]# vim /etc/profile.d/nginx.sh
    [root@localhost ~]# cat /etc/profile.d/nginx.sh 
    export PATH=/usr/local/nginx/sbin:$PATH
    [root@localhost ~]# . /etc/profile.d/nginx.sh
    
    //服务控制方式,使用nginx命令
        
        -t  //检查配置文件语法
    [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
    [root@localhost ~]# 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
      
        -v  //输出nginx的版本
    [root@localhost ~]# nginx -v
    nginx version: nginx/1.14.2
    
        -c  //指定配置文件的路径
        -s  //发送服务控制信号,可选值有{stop|quit|reopen|reload} 
    [root@localhost ~]# nginx -s stop
    [root@localhost ~]# ss -antl
    State       Recv-Q Send-Q        Local Address:Port                       Peer Address:Port              
    LISTEN      0      128                       *:111                                   *:*                  
    LISTEN      0      128                       *:51856                                 *:*                  
    LISTEN      0      128                       *:22                                    *:*                  
    LISTEN      0      128                      :::45995                                :::*                  
    LISTEN      0      128                      :::111                                  :::*                  
    LISTEN      0      128                      :::22                                   :::*                  
    [root@localhost ~]# nginx 
    [root@localhost ~]# ss -antl
    State       Recv-Q Send-Q        Local Address:Port                       Peer Address:Port              
    LISTEN      0      128                       *:111                                   *:*                  
    LISTEN      0      128                       *:80                                    *:*                  
    LISTEN      0      128                       *:51856                                 *:*                  
    LISTEN      0      128                       *:22                                    *:*                  
    LISTEN      0      128                      :::45995                                :::*                  
    LISTEN      0      128                      :::111                                  :::*                  
    LISTEN      0      128                      :::22                                   :::*                  
    [root@localhost ~]#
    
        
    //启动nginx
    [root@localhost ~]# ss -antl
    State       Recv-Q Send-Q        Local Address:Port                       Peer Address:Port              
    LISTEN      0      128                       *:80                                    *:*                  
    LISTEN      0      128                       *:22                                    *:*                  
    LISTEN      0      100               127.0.0.1:25                                    *:*                  
    LISTEN      0      128                       *:10050                                 *:*                  
    LISTEN      0      128                       *:10051                                 *:*                  
    LISTEN      0      128               127.0.0.1:9000                                  *:*                  
    LISTEN      0      128                      :::22                                   :::*                  
    LISTEN      0      100                     ::1:25                                   :::*                  
    LISTEN      0      80                       :::3306                                 :::*                  
    

    5.3 用脚本来启动服务

    以service nginx [start,restart,stop,reload]的方式来启动脚本

    //在/etc/init.d/的目录下创建一个名为nginx的脚本,init.d目录包含许多系统各种服务的启动和停止脚本,service命令也是调用这里面的服务
    [root@localhost ~]# cd /etc/init.d/
    [root@localhost init.d]# vim nginx.sh 
    [root@localhost init.d]# cat nginx.sh
    #!/bin/bash
    case "$1" in
    start)
    	/usr/local/nginx/sbin/nginx &> /dev/null
    	if [ $? -ne 0 ];then
    		echo " start faild,请检查是否已经开启" 
    	fi
    	;;
    stop)
    	/usr/local/nginx/sbin/nginx -s stop &> /dev/null
    	if [ $? -ne 0 ];then
    		echo "stop faild,请检查是否已将停止"
    	fi
    	;;
    reload)
    	/usr/local/nginx/sbin/nginx -s reload &> /dev/null
    	if [ $? -ne 0 ];then
    		echo "配置文件加载错误,请检查是否开启服务"
    	fi
    	;;
    restart)
    	$0 stop
    	$0 start
    	;;
    *)
    	echo "Please enter service nginx start|restart|stop|reload"
    	;;
    esac
    
    [root@localhost init.d]# chmod 755 nginx.sh
    [root@localhost init.d]# mv nginx.sh nginx
    [root@localhost init.d]# ll
    总用量 64
    -rw-r--r--. 1 root root  17500 5月   3 2017 functions
    -rwxr-xr-x. 1 7161 31415 10576 2月  28 17:29 mysqld
    -rwxr-xr-x. 1 root root   4334 5月   3 2017 netconsole
    -rwxr-xr-x. 1 root root   7293 5月   3 2017 network
    -rwxr-xr-x. 1 root root    550 2月  28 18:18 nginx
    -rwxr-xr-x. 1 root root   2402 2月  28 17:52 php-fpm
    -rw-r--r--. 1 root root   1160 6月  27 2017 README
    -rwxr-xr-x. 1 root root   2443 3月   6 2017 rhnsd
    
    //用service命令来调用这个脚本
    [root@localhost ~]# service nginx stop
    [root@localhost ~]# ss -antl
    State       Recv-Q Send-Q        Local Address:Port                       Peer Address:Port              
    LISTEN      0      128                       *:22                                    *:*                  
    LISTEN      0      100               127.0.0.1:25                                    *:*                  
    LISTEN      0      128                       *:10050                                 *:*                  
    LISTEN      0      128                       *:10051                                 *:*                  
    LISTEN      0      128               127.0.0.1:9000                                  *:*                  
    LISTEN      0      128                      :::22                                   :::*                  
    LISTEN      0      100                     ::1:25                                   :::*                  
    LISTEN      0      80                       :::3306                                 :::*                  
    [root@localhost ~]# service nginx start
    [root@localhost ~]# ss -antl
    State       Recv-Q Send-Q        Local Address:Port                       Peer Address:Port              
    LISTEN      0      128                       *:80                                    *:*                  
    LISTEN      0      128                       *:22                                    *:*                  
    LISTEN      0      100               127.0.0.1:25                                    *:*                  
    LISTEN      0      128                       *:10050                                 *:*                  
    LISTEN      0      128                       *:10051                                 *:*                  
    LISTEN      0      128               127.0.0.1:9000                                  *:*                  
    LISTEN      0      128                      :::22                                   :::*                  
    LISTEN      0      100                     ::1:25                                   :::*                  
    LISTEN      0      80                       :::3306                                 :::*                  
    [root@localhost ~]# service nginx restart
    [root@localhost ~]# ss -antl
    State       Recv-Q Send-Q        Local Address:Port                       Peer Address:Port              
    LISTEN      0      128                       *:80                                    *:*                  
    LISTEN      0      128                       *:22                                    *:*                  
    LISTEN      0      100               127.0.0.1:25                                    *:*                  
    LISTEN      0      128                       *:10050                                 *:*                  
    LISTEN      0      128                       *:10051                                 *:*                  
    LISTEN      0      128               127.0.0.1:9000                                  *:*                  
    LISTEN      0      128                      :::22                                   :::*                  
    LISTEN      0      100                     ::1:25                                   :::*                  
    LISTEN      0      80                       :::3306                                 :::*                  
    [root@localhost ~]# service nginx reload
    [root@localhost ~]# service nginx ll
    Please enter service nginx start|restart|stop|reload
    

    6. nginx的配置文件详解

    主配置文件:/usr/local/nginx/conf/nginx.conf

    • 默认启动nginx时,使用的配置文件是:安装路径/conf/nginx.conf文件
    • 可以在启动nginx时通过-c选项来指定要读取的配置文件
      nginx常见的配置文件及其作用
    配置文件作用
    nginx.confnginx的基本配置文件
    mime.typesMIME类型关联的扩展文件
    fastcgi.conf与fastcgi相关的配置
    proxy.conf与proxy相关的配置
    sites.conf配置nginx提供的网站,包括虚拟主机

    6.1 nginx.conf配置详解

    nginx.conf的内容分为以下几段:

    • main配置段:全局配置段。其中main配置段中可能包含event配置段
    • event {}:定义event模型工作特性
      *http {}:定义http协议相关的配置
      配置指令:要以分号结尾,语法格式如下:

    derective value1 [value2 …]
    支持使用变量:

    • 内置变量:模块会提供内建变量定义
    • 自定义变量:set var_name value

    6.2 用于调试、定位问题的配置参数

    daemon {on|off}; //是否以守护进程方式运行nginx,调试时应设置为off
    master_process {on|off}; //是否以master/worker模型来运行nginx,调试时可以设置为off
    error_log 位置 级别; //配置错误日志

    error_log里的位置和级别能有以下可选项:

    位置级别
    file
    stderr
    syslog:server=address[,parameter=value]
    memory:size
    debug:若要使用debug级别,需要在编译nginx时使用–with-debug选项info
    notice
    warn
    error
    crit
    alert
    emerg

    6.3 正常运行必备的配置参数

    user USERNAME [GROUPNAME];    //指定运行worker进程的用户和组
    pid /path/to/pid_file;    //指定nginx守护进程的pid文件
    worker_rlimit_nofile number;    //设置所有worker进程最大可以打开的文件数,默认为1024
    worker_rlimit_core size;    //指明所有worker进程所能够使用的总体的最大核心文件大小,保持默认即可
    

    6.4 优化性能的配置参数

    worker_processes n; //启动n个worker进程,这里的n为了避免上下文切换,通常设置为cpu总核心数-1或等于总核心数
    worker_cpu_affinity cpumask …; //将进程绑定到某cpu中,避免频繁刷新缓存
    //cpumask:使用8位二进制表示cpu核心,如:
    0000 0001 //第一颗cpu核心
    0000 0010 //第二颗cpu核心
    0000 0100 //第三颗cpu核心
    0000 1000 //第四颗cpu核心
    0001 0000 //第五颗cpu核心
    0010 0000 //第六颗cpu核心
    0100 0000 //第七颗cpu核心
    1000 0000 //第八颗cpu核心

    timer_resolution interval; //计时器解析度。降低此值,可减少gettimeofday()系统调用的次数
    worker_priority number; //指明worker进程的nice值

    6.5 事件相关的配置:event{}段中的配置参数

    accept_mutex {off|on}; //master调度用户请求至各worker进程时使用的负载均衡锁;on表示能让多个worker轮流地、序列化地去响应新请求
    lock_file file; //accept_mutex用到的互斥锁锁文件路径
    use [epoll | rtsig | select | poll]; //指明使用的事件模型,建议让nginx自行选择
    worker_connections #; //每个进程能够接受的最大连接数

    6.6 网络连接相关的配置参数

    keepalive_timeout number; //长连接的超时时长,默认为75s
    keepalive_requests number; //在一个长连接上所能够允许请求的最大资源数
    keepalive_disable [msie6|safari|none]; //为指定类型的UserAgeng禁用长连接
    tcp_nodelay on|off; //是否对长连接使用TCP_NODELAY选项,为了提升用户体验,通常设为on
    client_header_timeout number; //读取http请求报文首部的超时时长
    client_body_timeout number; //读取http请求报文body部分的超时时长
    send_timeout number; //发送响应报文的超时时长

    6.7 fastcgi的相关配置参数

    配置示例如下:

    location ~ \.php$ {
      root html;
      fastcgi_pass 127.0.0.1:9000;      //定义反向代理
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
      include fastcgi_params;
    }
    

    6.8 常需要进行调整的参数

    • worker_processes
    • worker_connections
    • worker_cpu_affinity
    • worker_priority

    6.9 nginx作为web服务器时使用的配置:http{}段的配置参数

    http{…}:配置http相关,由ngx_http_core_module模块引入。nginx的HTTP配置主要包括四个区块,结构如下:

    http {//协议级别
      include mime.types;
      default_type application/octet-stream;
      keepalive_timeout 65;
      gzipon;
      upstream {//负载均衡配置
        ...
      }
      server {//服务器级别,每个server类似于httpd中的一个<VirtualHost>
        listen80;
        server_name localhost;
        location / {//请求级别,类似于httpd中的<Location>,用于定义URL与本地文件系统的映射关系
          root html;
          index index.html index.htm;
        }
      }
    }
    

    http{}段配置指令:
    server {}:定义一个虚拟主机,示例如下:

    
    server {
      listen 80;
      server_name www.idfsoft.com;
      root "/vhosts/web";
    }
    

    listen:指定监听的地址和端口

    listen address[:port];
    listen port;
    

    server_name NAME […]; 后面可跟多个主机,名称可使用正则表达式或通配符

    当有多个server时,匹配顺序如下:

    1. 先做精确匹配检查
    2. 左侧通配符匹配检查,如*.idfsoft.com
    3. 右侧通配符匹配检查,如mail.*
    4. 正则表达式匹配检查,如~ ^.*.idfsoft.com$
    5. default_server

    root path; 设置资源路径映射,用于指明请求的URL所对应的资源所在的文件系统上的起始路径
    alias path; 用于location配置段,定义路径别名
    index file; 默认主页面(默认第一个网页就是主页面)

    error_page code […] [=code] URI | @name 根据http响应状态码来指明特用的错误页面,例如 error_page 404 /404_customed.html

    [=code]:以指定的响应码进行响应,而不是默认的原来的响应,默认表示以新资源的响应码为其响应码,例如 error_page 404 =200 /404_customed.html

    log_format 定义日志格式

    log_format main '$remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] “KaTeX parse error: Double superscript at position 32: … '̲status b o d y b y t e s s e n t &quot; body_bytes_sent &quot; bodybytessent"http_referer” ’
    ‘“ h t t p u s e r a g e n t &quot; &quot; http_user_agent&quot; &quot; httpuseragent""http_x_forwarded_for”’;
    access_log logs/access.log main;
    //注意:此处可用变量为nginx各模块内建变量

    location区段,通过指定模式来与客户端请求的URI相匹配

    //功能:允许根据用户请求的URI来匹配定义的各location,匹配到时,此请求将被相应的location配置块中的配置所处理,例如做访问控制等功能
    //语法:location [ 修饰符 ] pattern {…}

    常用修饰符说明:

    修饰符功能
    =精确匹配
    ~正则表达式模式匹配,区分大小写
    ~*正则表达式模式匹配,不区分大小写
    ^~前缀匹配,类似于无修饰符的行为,也是以指定模块开始,不同的是,如果模式匹配,那么就停止搜索其他模式了,不支持正则表达式
    @定义命名location区段,这些区段客户端不能访问,只可以由内部产生的请求来访问,如try_files或error_page等

    没有修饰符表示必须以指定模式开始,如:

    server {
      server_name www.zml.com;
      location /zml {
        ......
      }
    }
    

    那么如下内容就可正确匹配:

    =:表示必须与指定的模式精确匹配,如:

    server {
      server_name www.zml.com;
      location = /zml {
        ......
      }
    }
    

    那么如下内容就可正确匹配:

    server {
      server_name www.zml.com;
      location ~ ^/zml$ {
      ......
      }
    }
    

    那么如下内容就可正确匹配:

    如下内容则无法匹配:

    ~*:表示指定的正则表达式不区分大小写,如:

    server {
      server_name www.zml.com;
      location ~* ^/zml$ {
        ......
      }
    }
    

    那么如下内容就可正确匹配:

    如下内容则无法匹配:

    ~:类似于无修饰符的行为,也是以指定模式开始,不同的是,如果模式匹配,则停止搜索其他模式
    查找顺序和优先级:由高到底依次为

    1. 带有=的精确匹配优先
    2. 正则表达式按照他们在配置文件中定义的顺序
    3. 带有^~修饰符的,开头匹配
    4. 带有*修饰符的,如果正则表达式与URI匹配
    5. 没有修饰符的精确匹配

    优先级次序如下:

    ( location = 路径 ) --> ( location ^~ 路径 ) --> ( location ~ 正则 ) --> ( location ~* 正则 ) --> ( location 路径 )

    6.10 访问控制

    用于location段
    allow:设定允许哪台或哪些主机访问,多个参数间用空格隔开
    deny:设定禁止哪台或哪些主机访问,多个参数间用空格隔开
    示例:

    allow 192.168.194.132/24 192.168.233.0/24;
    deny all;

    6.11 基于用户认证

    auth_basic "欢迎信息";
    auth_basic_user_file "/path/to/user_auth_file"
    

    user_auth_file内容格式为:

    username:passowrd
    

    这里的密码为加密后的密码串,建议用htpasswd来创建此文件:

    htpasswd -c -m /path/to/.user_auth_file USERNAME
    -c		//创建文件
    -m	//用MD5来加密密码
    

    比如

    vim /usr/local/nginx/conf/nginx.conf
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   html;
                index  index.html index.htm;
                auth_basic "欢迎信息";
                auth_basic_user_file "/usr/loacl/nginx/conf/.userfile";
            }
            location /status {
                stub_status on;
                allow all;
            }
            #error_page  404              /404.html;
    

    在这里插入图片描述
    在这里插入图片描述

    6.12 开启状态界面

    开启status:

    location /status {
      stub_status {on | off};
      allow 172.16.0.0/16;
      deny all;
    }
    

    访问状态页面的方式:http://server_ip/status

    状态页面信息详解:

    状态码表示的意义
    Active connections 2当前所有处于打开状态的连接数
    accepts总共处理了多少个连接
    handled成功创建多少握手
    requests总共处理了多少个请求
    Readingnginx读取到客户端的Header信息数,表示正处于接收请求状态的连接数
    Writingnginx返回给客户端的Header信息数,表示请求已经接收完成,
    且正处于处理请求或发送响应的过程中的连接数
    Waiting开启keep-alive的情况下,这个值等于active - (reading + writing),
    意思就是Nginx已处理完正在等候下一次请求指令的驻留连接

    例如:

    [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
           #access_log  logs/host.access.log  main;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
            location /status {
                stub_status on;
                allow all;
    }
            #error_page  404              /404.html;
    [root@localhost ~]# nginx -s reload
    //要关闭防火墙和selinux
    

    在这里插入图片描述

    6.13 https配置

    在nginx本地服务器生产私钥,(也可以新建一个虚拟机作为CA服务器)
    CA的配置文件:/etc/pki/tls/openssl.cnf

    • CA生成一对密钥
    [root@zml ~]# cd /etc/pki/CA/
    [root@zml CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)		//生成密钥,括号必须要
    Generating RSA private key, 2048 bit long modulus
    .......+++
    ............................................+++
    e is 65537 (0x10001)
    [root@zml CA]# openssl rsa -in private/cakey.pem -pubout		//提取公钥
    writing RSA key
    -----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAydBh2tyW0pQL4LFn2/sO
    SMlAqBDH3vKdfwc3DliBklqMQJOb07bRZG6bjuDMHO+QFlhILqCEuC+V7ZinS2ec
    /MGZMYM4U5ZKUbXavDELQOGsT1H/g5L/S+UBUpHjxHIUw3iPHCGUJNDks4m2wjyb
    UcOJ0pRjS1KZ+MMycjPawKRtmoY9T41lPxHQW3TmiVkPEsq6y9MWnyGaFUyNkyQW
    A7Qx2RUgYeWanck/GJMjaQ/onoXJdpJZrQhqRs2OTOfpMJk9XBLVTst3xvH7JDSb
    rp02WuNVfA6/JemKtEeEoUJVCXbptjbwrWZYVMbpRpja8R+PcAcdLmsCEmsA1JqW
    9wIDAQAB
    -----END PUBLIC KEY-----
    
    • CA生成自签证证书
    [root@zml CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 356		//生成自签署证书
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [XX]:CN
    State or Province Name (full name) []:Hubei
    Locality Name (eg, city) [Default City]:WuHan
    Organization Name (eg, company) [Default Company Ltd]:runtime
    Organizational Unit Name (eg, section) []:runtime
    Common Name (eg, your name or your server's hostname) []:www.zml.com
    Email Address []:123@.com
    [root@zml CA]# openssl x509 -text -in cacert.pem		//读出cacert.pem证书的内容
    [root@zml CA]# mkdir certs crl newcerts		//如果有就不创建
    [root@zml CA]# touch index.txt && echo 01 > serial
    [root@zml CA]# ls
    cacert.pem  certs  crl  index.txt  newcerts  private  serial
    
    • 客户端(例如Apache服务器,这里用的是nginx服务器)生成密钥
    [root@zml ~]# cd /usr/local/nginx/
    [root@zml nginx]# mkdir ssl && cd ssl
    [root@zml ~]# cd /usr/local/nginx/ssl/
    [root@zml ssl]# (umask 077;openssl genrsa -out nginx.key 2048)
    
    • 客户端生成证书请求
    [root@zml ssl]# openssl req -new -key nginx.key -days 365 -out nginx.csr
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [XX]:CN
    State or Province Name (full name) []:Hubei
    Locality Name (eg, city) [Default City]:WuHan
    Organization Name (eg, company) [Default Company Ltd]:runtime
    Organizational Unit Name (eg, section) []:runtime
    Common Name (eg, your name or your server's hostname) []:www.zml.com
    Email Address []:123@.com
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    [root@zml ssl]#
    
    • 客户端把证书签署请求文件发送给CA(这里因为是在本地上一起做的,所以不需要这一步)
    • CA签署客户端提交上来的证书
    [root@zml ~]# cd /etc/pki/CA/
    [root@zml CA]# openssl ca -in /usr/local/nginx/ssl/nginx.csr -out nginx.crt -days 365
    Using configuration from /etc/pki/tls/openssl.cnf
    Check that the request matches the signature
    Signature ok
    Certificate Details:
            Serial Number: 1 (0x1)
            Validity
                Not Before: Mar  4 07:12:09 2019 GMT
                Not After : Mar  3 07:12:09 2020 GMT
            Subject:
                countryName               = CN
                stateOrProvinceName       = Hubei
                organizationName          = runtime
                organizationalUnitName    = runtime
                commonName                = www.zml.com
                emailAddress              = 123@.com
            X509v3 extensions:
                X509v3 Basic Constraints: 
                    CA:FALSE
                Netscape Comment: 
                    OpenSSL Generated Certificate
                X509v3 Subject Key Identifier: 
                    16:94:74:1F:0A:4F:39:38:01:8B:3D:F7:9C:39:51:98:AA:EB:F2:27
                X509v3 Authority Key Identifier: 
                    keyid:E5:A4:4E:84:9B:E5:55:C3:0F:61:FD:B9:34:C5:E2:16:85:87:7B:58
    
    Certificate is to be certified until Mar  3 07:12:09 2020 GMT (365 days)
    Sign the certificate? [y/n]:y
    
    
    1 out of 1 certificate requests certified, commit? [y/n]y
    Write out databas
    
    • CA把签署好的证书nginx.crt复制到/usr/local/nginx/ssl/下
    [root@zml ~]# cd /usr/local/nginx/ssl/
    [root@zml ssl]# ls
    nginx.csr  nginx.key
    [root@zml ssl]# cp /etc/pki/CA/nginx.crt .
    [root@zml ssl]# ls
    nginx.crt  nginx.csr  nginx.key
    
    • 获得证书后,修改nginx的配置文件
    //取消配置文件中HTTPS server以及所包含内容的所有注释
    [root@zml ~]# vim /usr/local/nginx/conf/nginx.conf
         #HTTPS server
    
        server {
            listen       443 ssl;
            server_name  www.zml.com;
    
            ssl_certificate      /usr/local/nginx/ssl/nginx.crt;		//证书的所在位置
            ssl_certificate_key  /usr/local/nginx/ssl/nginx.key;		//证书的所在位置
    
            ssl_session_cache    shared:SSL:1m;
            ssl_session_timeout  5m;
    
            ssl_ciphers  HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers  on;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
        }
    
    }
    

    6.14 rewrite

    语法:rewrite regex replacement flag;,如:

    rewrite ^/images/(..jpg)$ /imgs/$1 break;
    此处的$1用于引用(.
    .jpg)匹配到的内容,又如:

    rewrite ^/bbs/(.*)$ http://www.idfsoft.com/index.html redirect
    如上例所示,replacement可以是某个路径,也可以是某个URL

    常见的flag

    flag作用
    last基本上都用这个flag,表示当前的匹配结束,继续下一个匹配,最多匹配10个到20个
    一旦此rewrite规则重写完成后,就不再被后面其它的rewrite规则进行处理
    而是由UserAgent重新对重写后的URL再一次发起请求,并从头开始执行类似的过程
    break中止Rewrite,不再继续匹配
    一旦此rewrite规则重写完成后,由UserAgent对新的URL重新发起请求,
    且不再会被当前location内的任何rewrite规则所检查
    redirect以临时重定向的HTTP状态302返回新的URL
    permanent以永久重定向的HTTP状态301返回新的URL

    rewrite模块的作用是用来执行URL重定向。这个机制有利于去掉恶意访问的url,也有利于搜索引擎优化(SEO)

    nginx使用的语法源于Perl兼容正则表达式(PCRE)库,基本语法如下:

    标识符意义
    ^必须以^后的实体开头
    $必须以$前的实体结尾
    .匹配任意字符
    []匹配指定字符集内的任意字符
    [^]匹配任何不包括在指定字符集内的任意字符串
    |匹配 | 之前或之后的实体
    ()分组,组成一组用于匹配的实体,通常会有

    捕获子表达式,可以捕获放在()之间的任何文本,比如:

    ^(hello|sir)$ //字符串为“hi sir”捕获的结果:$1=hi$2=sir
    //这些被捕获的数据,在后面就可以当变量一样使用了

    6.15 if

    语法:if (condition) {…}

    应用场景:

    • server段

    • location段
      常见的condition

    • 变量名(变量值为空串,或者以“0”开始,则为false,其它的均为true)

    • 以变量为操作数构成的比较表达式(可使用=,!=类似的比较操作符进行测试)

    • 正则表达式的模式匹配操作

    1. ~:区分大小写的模式匹配检查
    2. ~*:不区分大小写的模式匹配检查
    3. ! ~和!~*:对上面两种测试取反
    • 测试指定路径为文件的可能性(-f,!-f)
    • 测试指定路径为目录的可能性(-d,!-d)
    • 测试文件的存在性(-e,!-e)
    • 检查文件是否有执行权限(-x,!-x)

    6.15.1 基于浏览器实现分离案例

    if ($http_user_agent ~ Firefox) {
      rewrite ^(.*)$ /firefox/$1 break;
    }
    
    if ($http_user_agent ~ MSIE) {
      rewrite ^(.*)$ /msie/$1 break;
    }
    
    if ($http_user_agent ~ Chrome) {
      rewrite ^(.*)$ /chrome/$1 break;
    }
    

    6.15.2 防盗链案例

    location ~* \.(jpg|gif|jpeg|png)$ {
      valid_referers none blocked www.idfsoft.com;
      if ($invalid_referer) {
        rewrite ^/ http://www.idfsoft.com/403.html;
      }
    }
    

    6.16 反向代理与负载均衡

    nginx通常被用作后端服务器的反向代理,这样就可以很方便的实现动静分离以及负载均衡,从而大大提高服务器的处理能力。

    nginx实现动静分离,其实就是在反向代理的时候,如果是静态资源,就直接从nginx发布的路径去读取,而不需要从后台服务器获取了。

    但是要注意,这种情况下需要保证后端跟前端的程序保持一致,可以使用Rsync做服务端自动同步或者使用NFS、MFS分布式共享存储。

    Http Proxy模块,功能很多,最常用的是proxy_pass和proxy_cache

    如果要使用proxy_cache,需要集成第三方的ngx_cache_purge模块,用来清除指定的URL缓存。这个集成需要在安装nginx的时候去做,如:
    ./configure --add-module=…/ngx_cache_purge-1.0 …

    nginx通过upstream模块来实现简单的负载均衡,upstream需要定义在http段内

    在upstream段内,定义一个服务器列表,默认的方式是轮询,如果要确定同一个访问者发出的请求总是由同一个后端服务器来处理,可以设置ip_hash,如:

    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;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
    	upstream zml.com {
     		#ip_hash;		//如果想要访问的请求是同一个后端服务器来处理的话,就需要加这个
      		server 192.168.194.132 weight=2;
      		server 192.168.194.138	//默认weight(请求)值是1
    }
    //重新加载配置文件后,要关闭防火墙和selinux
    

    在这里插入图片描述
    在这里插入图片描述
    注意:这个方法本质还是轮询,而且由于客户端的ip可能是不断变化的,比如动态ip,代理,翻墙等,因此ip_hash并不能完全保证同一个客户端总是由同一个服务器来处理。

     #gzip  on;
    	upstream zml.com {
     		ip_hash;		//如果想要访问的请求是同一个后端服务器来处理的话,就需要加这个
      		server 192.168.194.132 weight=2;
      		server 192.168.194.138	//默认weight(请求)值是1
    }
    

    这里就会看到怎么访问都是同一个界面
    在这里插入图片描述

    • 做反向代理
      定义好upstream后,需要在server段内添加如下内容:
    server {
      location / {
        proxy_pass http://zml.com;
      }
    }
    
    展开全文
  • Nginx安装配置

    千次阅读 2017-01-12 17:53:09
    Linux下nginx安装配置,nginx安装,nginx配置文件修改 nginx配置tomcat服务,nginx转发tomcat

    一、Linux下安装配置nginx

    第一次安装nginx,中间出现的问题一步步解决。
    用到的工具secureCRT,连接并登录服务器。

    1.1 rz命令,会弹出会话框,选择要上传的nginx压缩包。

    #rz  

    1.2 解压

    [root@vw010001135067 ~]# cd /usr/local/
    [root@vw010001135067 local]# tar -zvxf nginx-1.10.2.tar.gz

    1.3 进入nginx文件夹,执行./configure命令

    [root@vw010001135067 local]# cd nginx-1.10.2
    [root@vw010001135067 nginx-1.10.2]# ./configure

    报错如下:

    checking for OS
     + Linux 2.6.32-431.el6.x86_64 x86_64
    checking for C compiler ... not found
    
    ./configure: error: C compiler cc is not found

    出现这个错误。那么就是gcc 包没有安装。

    1.3.1 安装gcc

    查看gcc

    [root@vw010001135067 nginx-1.10.2]# whereis gcc
    gcc:

    安装gcc

    [root@vw010001135067 nginx-1.10.2]# yum -y install gcc

    安装成功后再次查看

    [root@vw010001135067 nginx-1.10.2]# whereis gcc
    gcc: /usr/bin/gcc /usr/lib/gcc /usr/libexec/gcc /usr/share/man/man1/gcc.1.gz

    gcc安装好了。

    1.3.2 继续执行./configure

    [root@vw010001135067 nginx-1.10.2]# ./configure
    checking for OS
     + Linux 2.6.32-431.el6.x86_64 x86_64
    checking for C compiler ... found
    ......
    checking for PCRE library ... not found
    checking for PCRE library in /usr/local/ ... not found
    checking for PCRE library in /usr/include/pcre/ ... not found
    checking for PCRE library in /usr/pkg/ ... not found
    checking for PCRE library in /opt/local/ ... not found
    
    ./configure: error: the HTTP rewrite module requires the PCRE library.
    You can either disable the module by using --without-http_rewrite_module
    option, or install the PCRE library into the system, or build the PCRE library
    statically from the source with nginx by using --with-pcre=<path> option.

    出现如上错误。安装pcre-devel

    [root@vw010001135067 nginx-1.10.2]# yum install pcre-devel

    1.3.3 再次执行./configure

    error: the HTTP gzip module requires the zlib library.
    You can either disable the module by using --without-http_gzip_module
    option, or install the zlib library into the system, or build the zlib library
    statically from the source with nginx by using --with-zlib=<path> option.

    如果有这个错误 那么执行

    yum install zlib-devel

    1.3.4 执行./configure后没有报错

    [root@vw010001135067 nginx-1.10.2]# ./configure
    checking for OS
     + Linux 2.6.32-431.el6.x86_64 x86_64
    checking for C compiler ... found
     + using GNU C compiler
     + gcc version: 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) 
    .......
    Configuration summary
      + using system PCRE library
      + OpenSSL library is not used
      + md5: using system crypto library
      + sha1: using system crypto library
      + using system zlib library
    
      nginx path prefix: "/usr/local/nginx"
      nginx binary file: "/usr/local/nginx/sbin/nginx"
      nginx modules path: "/usr/local/nginx/modules"
      nginx configuration prefix: "/usr/local/nginx/conf"
      nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
      nginx pid file: "/usr/local/nginx/logs/nginx.pid"
      nginx error log file: "/usr/local/nginx/logs/error.log"
      nginx http access log file: "/usr/local/nginx/logs/access.log"
      nginx http client request body temporary files: "client_body_temp"
      nginx http proxy temporary files: "proxy_temp"
      nginx http fastcgi temporary files: "fastcgi_temp"
      nginx http uwsgi temporary files: "uwsgi_temp"
      nginx http scgi temporary files: "scgi_temp"

    1.4 如果你想使用openssl 功能,sha1 功能。 那么安装openssl ,sha1 吧

    [root@vw010001135067 nginx-1.10.2]# yum install openssl openssl-devel 
    [root@vw010001135067 nginx-1.10.2]# install perl-Digest-SHA1.x86_64

    1.4.1 开启ssl 模块 执行./configure –with-http_ssl_module

    [root@vw010001135067 nginx-1.10.2]# ./configure --with-http_ssl_module

    1.4.2 启用“server+status”页,执行./configure –with-http_stub_status_module

    [root@vw010001135067 nginx-1.10.2]# ./configure --with-http_stub_status_module

    上面两个命令同时启动可以

    [root@vw010001135067 nginx-1.10.2]# ./configure --with-http_stub_status_module --with-http_ssl_module

    1.5 上面configure就通过了

    执行make 命令,执行make install 命令

    [root@vw010001135067 nginx-1.10.2]# make
    [root@vw010001135067 nginx-1.10.2]# make install

    至此,nginx 执行成功了

    1.6 配置环境变量

    在/etc/profile 中加入配置
    打开配置文件

    [root@vw010001135067 nginx-1.10.2]# vi /etc/profile

    在配置文件中加入

    #nginx configure
    export NGINX_HOME=/usr/local/nginx-1.10.2
    export PATH=$PATH:$NGINX_HOME/sbin

    我开始像上面填写,结果nginx -v的时候查找不到。注意到上面我的nginx_home配置的地址不对。先找到nginx的安装地址

    [root@vw010001135067 nginx-1.10.2]# whereis nginx
    nginx: /usr/local/nginx

    还真是地址写错了,把上面的改成

    #nginx configure
    export NGINX_HOME=/usr/local/nginx
    export PATH=$PATH:$NGINX_HOME/sbin

    编译完保存退出并执行

    [root@vw010001135067 nginx-1.10.2]# source /etc/profile

    使配置生效。

    1.7 查看nginx版本

    [root@vw010001135067 nginx]# nginx -v
    nginx version: nginx/1.10.2

    整个过程成功了!

    二、修改nginx.conf

    2.1 启动nginx

    我的nginx服务在http://10.1.135.67/,配置成功后,现在启动nginx

    [root@vw010001135067 nginx]# cd /usr/local/nginx
    [root@vw010001135067 nginx]# nginx -c conf/nginx.conf

    启动成功,在浏览器打开http://10.1.135.67/,默认端口号80.

    这里写图片描述

    如上图,nginx已经正常工作了。

    2.2 配置tomcat服务

    现在我的tomcat服务在10.1.29.15,需要通过nginx转发。那么打开nginx.conf,修改配置文件。如下,添加:

    
    #user  nobody;
    worker_processes  1;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024;#最大连接数,默认为512
        accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
        multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
        #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport   
    }
    
    
    http {
        #文件扩展名与文件类型映射表
        include       mime.types;
    
        #默认文件类型,默认为text/plain   
        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"'; 
    
        #combined为日志格式的默认值
        access_log  logs/access.log  main;
    
        #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块
        sendfile        on;
        sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    
        #tcp_nopush     on;
    
        #连接超时时间,默认为75s,可以在http,server,location块。
        keepalive_timeout  65;
    
        #gzip  on;
    
        upstream upload {
          server 10.1.29.15:8080;
        }
    
        error_page 404 https://www.baidu.com; #错误页
    
        server {
            keepalive_requests 120; #单连接请求上限次数。
            listen       80;  #监听端口
            server_name  localhost; #监听地址   
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location ~ ^.*?/upload/[^/]*?$ {
                proxy_connect_timeout 15;
                proxy_send_timeout 15;
                proxy_read_timeout 15;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Connection "";
                proxy_pass http://upload;  #请求转向upload 定义的服务器列表
                client_max_body_size    1024m;
    }    
        }
    }

    配置好后,保存配置文件,并且重启nginx

    [root@vw010001135067 nginx]# nginx -s reload

    在浏览器调用upload项目是否成功
    这里写图片描述

    如图能正确访问项目,配置成功!

    展开全文
  • Nginx基础

    2017-07-27 15:24:23
    一、Nginx简介Nginx,原名engine X(后简称为Nginx)。是俄罗斯一名程序员为提高公司网站性能而研发出来的,于2004年10月份发布第一个公开版本。由于当时互联网技术已经日新月异,Nginx采用epoll事件模型,能够支持...

    一、Nginx简介

    Nginx,原名engine X(后简称为Nginx)。是俄罗斯一名程序员为提高公司网站性能而研发出来的,于2004年10月份发布第一个公开版本。由于当时互联网技术已经日新月异,Nginx采用epoll事件模型,能够支持异步IO处理机制,所以Nginx处理并发访问的效率相当高。由于其高效的性能,灵活的配置,丰富的模块与第三方库文件,Nginx已经成为当前主流的web服务器之一,同时在反向代理,负载均衡上也很受企业青睐。

    1、Nginx特性

    • 高可靠性
      Nginx由一个主控进程(master),以及众多的工作进程组成(worker)

      master主控进程工作内容:
      1、读取并验证配置文件
      2、创建绑定或关闭套接字
      3、启动终止维护worker进程的个数
      4、无须重启进程让配置文件的新配置加载
      5、完成平滑版本升级
      worker子进程工作内容:
      1、有的子进程实现缓存加载(在反向代理中实现)
      2、响应用户请求
      3、实现缓存管理

    • 低内存消耗
      由于是一个线程响应多个请求,所以对内存的消耗特别低。10000keep-alive模式下的connection,仅需要消耗2.5M的内存

    • 支持热部署
      Nginx的配置文件更新、日志文件滚动,或者版本升级不用重启进程

    • 支持事件驱动、异步IO(AIO)、mmap(内存映射)

    • 支持sendfile,sendfile64

    什么是sendfile?
    想要理解什么是sendfile那么首先就要理解,数据从磁盘到内存空间的调用过程。
    1、将数据从磁盘中读取出来
    操作系统要想调用磁盘中的数据,首先要通过进程向内核发起调用请求,系统通过调用read()函数,产生上下文切换,从user mode(用户模式)切换为kernel mode(内核模式),通过DMA(直接内存访问)将数据从磁盘空间拷贝到内核空间。通过read()函数的返回,再次产生上下文切换,将数据从内核空间拷贝到用户空间。这是一次I/O。
    2、将数据封装发送出去
    进程将数据封装通过调用write()函数产生上下文切换,将数据从用户空间拷贝到内核与socket相关的缓冲区,然后write()函数返回,再次产生上下文切换。DMA将缓冲区的数据拷贝到协议栈,也就是网卡队列中。这是一次网络I/O。
    从上述过程中,我们看出,两次IO是很没有必要的,sendfile就是基于这种情况,让内核从磁盘加载完数据之后直接封装成响应报文发送到网卡队列中,这样就减少了一些不必要的IO操作。sendfile只能传输很小的数据量,sendfile64是增强版。

    2、Nginx功能

    • 静态资源的web服务器
    • http、pop3、smtp的反向代理服务器

      什么是反向代理服务器?
      http的工作模式就是所有的用户请求都是通过浏览器直接提交给服务器的。这就造成服务器直接面多众多的客户端,web服务器既要建立连接,维持连接,又要处理请求。这就会造成web服务器压力过大,有的客户端会对服务器端发起攻击的。所以基于这些问题,提出反向代理服务器的概念。
      反向代理服务器声称自己是web服务器并且监听在80端口,所有的用户请求都提交给反向代理服务器,反省代理服务器收到用户的请求之后将请求接进用户空间并且解析该请求(代理服务器也有自己的进程,这个进程我们称之为代理进程)判断该用户是否有访问权限。如果没有,直接拒绝。如果有,反向代理服务器也不将用户请求直接转发给web服务器,而是重新封装IP报文之后发给web服务器,并将请求结果又进行重新封装之后发给客户端。在此过程中,客户端并不知道自己请求是一个反向代理服务器

      什么是正向代理服务器?
      正向代理服务器就是客户端能够通过它请求任意网站并且隐藏客户端自身的。

      可以这样理解,反向代理服务器是保护服务器的,正向代理服务器是保护客户端的

    • 缓存加速、负载均衡

      Nginx作为反向代理服务器能够将客户端的请求资源缓存到缓存空间中,如果客户端再次请求该资源,Nginx就不用再次去后端请求web服务器了,而是直接将缓存中的资源取出直接响应客户端。所以,缓存机制在web中是一个非常重要的内容(甚至有专门的缓存服务器),能够快速的响应客户端,以及能够大大减轻后端web服务器的压力。所以有缓存为王的说法。

    • 支持FastCGI(fpm, LNMP), uWSGI(Python)等
    • 模块化(非DSO机制)、过滤器zip、SSI及图像的大小调整
    • 支持SSL

    4、Nginx的扩展功能

    • 基于名称和IP的虚拟主机
    • 支持keepalive
    • 支持平滑升级
    • 定制访问日志、支持使用日志缓冲区提供日志存储性能
    • 支持url rewrite
    • 支持路径别名
    • 支持基于IP及用户的访问控制
    • 支持速率限制,支持并发数限制

    5、Nginx的工作模式

    非阻塞、事件驱动,由一个master进程生成多个worker线程,每个worker响应n个请求


    二、Nginx安装

    1、Nginx的编译安装

    下载地址:http://nginx.org/

    nginx

    解压文件:

    [root@ling ~]# tar xf nginx-1.8.0.tar.gz 

    查看编译选项

    [root@ling ~]# cd nginx-1.8.0
    [root@ling nginx-1.8.0]# ./configure --help
    --with:表示nginx在编译过程中没有将该选项编译进去,如果需要手动添加
    --without: 表示nginx在编译过程中将该选项编译进去,如果不需要手动移除

    进行编译与安装

    安装之前,解决依赖关系
    [root@ling nginx-1.8.0]# yum -y install pcre-devel
    [root@ling nginx-1.8.0]# yum -y install openssl-devel
    [root@ling nginx-1.8.0]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi
    
    --prefix=/usr/local/nginx           安装目录
    
    --conf-path=/etc/nginx/nginx.conf   主配置文件安装目录
    
    --user=nginx                        运行Nginx的用户
    
    --group=nginx                       组
    
    --error-log-path=/var/run/nginx/nginx.pid   错误日志放置位置
    
    --http-log-path=/var/log/nginx/access.log   访问日志放置位置
    
    --pid-path=/var/run/nginx/nginx.pid     
    CentOS一般放置在/var/run目录下
    
    --lock-path=/var/lock/nginx.lock    互斥锁
    
    --with-http_ssl_module              默认ssl模块是没有启动起来的
    
    --with-http_stub_status_module      nginx的状态页面
    
    --with-http_gzip_static_module      压缩静态内容的压缩模块
    
    --with-http_flv_module          支持流媒体,如果不需要可以不编译
    
    --http-client-body-temp-path=/var/tmp/nginx/client      
    客户端body的临时存放路径,这个可以不用指定,如果指定了之后一定要手动添加包括这个目录在内的以下三个目录
    
    如果没有指定body的临时存放路径的话,下面三个路径都不用指定
    --http-proxy-temp-path=/var/tmp/nginx/proxy         
    --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi
    --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi
    
    安装
    [root@ling nginx-1.8.0]# make && make install
    

    2、运行Nginx

    Nginx官网为我们提供了很多人性化的设计,可以使用命令进行运行,也可以使用服务脚本进行运行。

    1、命令行方式进行运行:

    将运行进程添加到PATH环境变量中

    [root@ling ~]# vim /etc/profile
    export PATH=/usr/local/nginx/sbin:$PATH
    [root@ling ~]# . /etc/profile
    [root@ling ~]# echo $PATH
    /usr/local/nginx/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    [root@ling ~]# nginx -h    打印帮助信息,这里我就不一一解释了
    nginx version: nginx/1.8.0
    Usage: nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]
    
    Options:
      -?,-h         : this help
      -v            : show version and exit
      -V            : show version and configure options then exit
      -t            : test configuration and exit
      -q            : suppress non-error messages during configuration testing
      -s signal     : send signal to a master process: stop, quit, reopen, reload
      -p prefix     : set prefix path (default: /usr/local/nginx/)
      -c filename   : set configuration file (default: /etc/nginx/nginx.conf)
      -g directives : set global directives out of configuration file
    

    如果这里看不明白,在Nginx官网上面也有文档:
    https://www.nginx.com/resources/wiki/start/topics/tutorials/commandline/

    2、配置服务脚本
    编译安装Nginx不会提供Nginx的服务配置脚本,但是官网为我们提供了Nginx的脚本模板,根据自己的实际情况自行修改即可。这里以刚才编译安装来举例。

    https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/

    在CentOS 6中,将文档中的脚本复制到/etc/rc.d/init.d/nginx.conf中,并修改文档中的两个参数:

    [root@ling ~]# vim /etc/rc.d/init.d/nginx.conf
    nginx="/usr/local/nginx/sbin/nginx"
    这个是nginx的主进程所在目录
    
    NGINX_CONF_FILE="/etc/nginx/nginx.con
    这个是nginx的主配置文件所在的路径
    
    [root@ling ~]# chkconfig --add nginx
    [root@ling ~]# chkconfig --level 3 nginx on | grep nginx
    nginx           0:off   1:off   2:off   3:on    4:off   5:off   6:off
    [root@ling ~]# service nginx start

    在CentOS 7中,服务脚本与CentOS 6有很大的区别。这里的文档不适用于CentOS 7。CentOS 7 请使用以下脚本:

    [root@ling run]# vim /lib/systemd/system/nginx.service
    
    [Unit]
    Description=nginx - high performance web server
    Documentation=http://nginx.org/en/docs/
    After=network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=forking
    PIDFile=/usr/local/nginx/logs/nginx.pid
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/ngxin/sbin/nginx -s stop
    
    [Install]
    WantedBy=multi-user.target

    在上述服务配置脚本中,[Unit]中的After表示在什么服务启动之后启动Nginx,其他的Description与Document随意。最主要的是[Service]中的配置
    PDFile: PID所在的文件路径
    ExecStart: 启动命令,这里的启动可以自己写一个启动脚本,也可以直接根据二进制程序进行启动,这里我是以二进制程序进行启动的
    ExecReload: 重载
    ExecStop: 停止
    [Install]中的格式一般都是这样的,可以多用户运行

    CentOS 7中要将服务配置脚本放置在/lib/systemd/system/目录下,同时修改完服务脚本之后要进行以下操作:

    对脚本进行重载
    [root@ling run]# systemctl daemon-reload
    开启服务
    [root@ling run]# systemctl enable nginx
    查看服务
    [root@ling run]# systemctl list-unit-files | grep nginx
    nginx.service                               static
    启动
    [root@ling run]# systemctl start nginx

    以上便是我对Nginx的一些总结,如有不对的地方,还望大家能够指正,谢谢大家观看!

    展开全文
  • Nginx 教程

    2020-02-04 21:32:41
    Nginx 安装 Nginx 是一款面向性能设计的 HTTP 服务器,能反向代理 HTTP,HTTPS 和邮件相关(SMTP,POP3,IMAP)的协议链接。并且提供了负载均衡以及 HTTP 缓存。它的设计充分使用异步事件模型,削减上下文调度的开销...
  • nginx安装

    2019-11-29 17:38:45
    vi /etc/profile #JAVA_HOME export JAVA_HOME=/jdk安装目录 export PATH=$PATH:$JAVA_HOME/bin 3.刷新环境变量 source /etc/profile 4.测试是否成功: java -version 会显示出版本号 安装Nginx Nginx....
  • Nginx 中间件

    2019-04-11 19:46:28
    1)、高并发响应性能非常好,比较与Tomcat的500,Nginx可以达到50000; 2)、反向代理性能非常强;(可用于负载均衡) 3)、内存和cpu占用率低;(是Apache的10%~20%) 4)、对后端服务有健康检查功能; 5)、配置...
  • nginx rerwite

    2015-02-02 18:13:55
    最近在VPS上尝试配置安装一个网站,...原来Apache 重写的规则到nginx上还有一些不太一样的地方。 这里只是简单记录一些学习示例,高手略过,新手可以看一下。 Nginx Rewrite规则相关指令 Nginx Rewrite规则相关指令
  • nginx入门

    2017-05-24 23:30:24
    Nginx是一个轻量级的Web服务器/反向代理服务器。它的一个突出优点是反向代理实现负载均衡。 实现原理: nginx作为代理服务器接收HTTP请求 根据各个负载节点的权重,会随机的由一个节点来处理这个请求,然后返回...
  • Nginx + Node + Vue 部署初试 知乎 个人博客 Github 日常学习笔记 Nginx 定义 异步框架的 Web服务器,也可以用作反向代理,负载平衡器 , HTTP缓存, 媒体流等的开源软件。它最初是一个旨在实现最高性能和稳定性的...
  • Nginx安装

    2019-11-04 10:20:32
    Nginx的安装 1)Nginx版本 1.Nginx官网:http://nginx.org 2.官网Nginx的安装版本 Mainline version(主要开发版本,其实就是还处于开发版) Stable version(当前最新稳定版) Legacy versions(旧的稳定版) 注:当然...
  • lua-nginx-module模块可以将Lua的强大功能嵌入NGINX服务器。 ...$ /usr/local/nginx/sbin/nginx -V nginx version: nginx/1.12.2 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) built .
  • nginxtop实时监控nginx状态

    千次阅读 2018-06-01 15:57:20
    http://www.ttlsa.com/nginx/nginx-modules-ngxtop-ttlsa/ 原文件pip命令安装...
  • Nginx网页安全优化

    2020-12-01 05:16:49
    Nginx网页安全优化修改用户组修改方法Nginx日志分割日志分割脚本隐藏版本信息隐藏版本号修改版本信息连接超时设置连接超时网页压缩参数配置网页缓存参数配置更改Nginx运行进程数修改系统文件数上限值开启支持高并发...
  • nginx优化

    千次阅读 2019-10-10 11:25:04
    nginx优化 一 什么是nginx Nginx是一款轻量级的Web 服务器,反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强,能够支持高达 50,000 个并发连接数的响应。事实上nginx的并发能力...
  • nginx服务

    2019-02-28 16:09:56
    1. nginx简介 nginx(发音同engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行,nginx的特点是占有内存少,并发能力强, 2. nginx的特性与优点 ...
  • nginx 配置环境变量

    2021-02-04 11:35:43
    打开系统配置文件:vim /etc/profile 添加配置文件: PATH=$PATH:/home/nginx/nginxssl/sbin #nginx启动文件路径 export PATH 保存配置文件:source /etc/profile
  • Nginx基本简介

    千次阅读 2021-05-05 14:59:43
    Nginx基本简述 Nginx是一个开源且高性能,可靠的Http Web服务、代理服务。 开源: 直接获取源代码 高性能: 支持海量并发 可靠: 服务稳定 我们为什么选择Nginx服务 Nginx非常轻量 功能模块少(源代码仅保留http与...
  • Nginx从入门到放弃Nginx详细教程

    千次阅读 2020-09-30 23:48:58
    1 Nginx环境搭建 1.1 下载和安装Nginx 在下载之前,我们先把编译工具及库文件安装一下。 yum install -y gcc pcre pcre-devel openssl openssl-devel gd gd-devel 然后来到:http://nginx.org/en/download.html ...
  • 源码安装Nginx

    2020-04-27 19:07:39
    1.0创建Nginx服务用户 useradd -s /sbin/mologin nginx 1.1安装相关依赖 yum install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel -y 1.2下载Nginx源码文件 wget ...
  • Linux安装Nginx

    2020-05-26 11:39:40
    第一步:下载Nginx wget http://nginx.org/download/nginx-1.18.0.tar.gz 注意:这一步最好在自己的目标目录进行操作,建议使用一个专门的目录用来安装环境。 第二步:配置nginx安装所需的环境 安装gcc 安装 ...
  • Ubuntu 安装nginx

    千次阅读 2016-10-27 16:48:43
    ubuntu 安装nginx

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,227
精华内容 8,490
关键字:

nginx修改profile