• CentOS7 源码安装Nginx及Nginx基本管理设置


    CentOS7 安装 参考文档

    CentOS7最小安装后初始化安装工具

      1:yum install net-tools 参考文档

         2:源码安装wget 参考文档 或者执行 yum -y install wget

    CentOS7 源码安装包步骤

      一:Nginx 安装步骤

        1-1:源码下载地址 http://nginx.org/en/download.html

          执行命令:wget wget http://nginx.org/download/nginx-1.21.3.tar.gz

        1-2:解压下载的文件 

          执行命令:tar  -zxvf   {压缩文件名}.tar.gz

        1-3:配置configure 检测安装及依赖信息

          查看命令文档执行:./configure --help

          

           先安装编译器

          执行:sudo yum -y install gcc

          再次执行:./configure 进行配置 如下图:

          

           检测到有依赖包没有装,根据提示去安装 pcre

          执行命令:sudo yum -y install pcre-devel

          再次执行:./configure  如下图:

          

          根据提示继续安装依赖包:

         执行命令:sudo yum -y install zlib-devel

         一直重复执行./configure 直到检测到没有依赖项就说明检测通过了,如下图:

         

          检测并指定安装路径命令:./configure --prefix=/usr/local/nginx

    、    

         1-4:执行make指令:源码生成可执行文件,中途不能出现error

          

        1-5:安装 make install

          执行安装命令:sudo make install

        

       测试:

         1:进入:/usr/local/nginx 执行:./sbin/nginx

         2:在浏览器中输入:http://localhost

         3:安装一个文本浏览器测试 yum -y install elinks

          

       

      Nginx相关目录文件

        nginx path prefix:/usr/local/nginx (Nginx安装目录)

        nginx binary file:/usr/local/nginx/sbin/nginx(Nginx启动目录)

        nginx moduless path:/usr/local/nginx/modules(Nginx相关模块目录)

        nginx configuration prefix:/usr/local/nginx/conf(Nginx配置文件目录) 

        nginx configuration file:/usr/local/nginx/conf/nginx.con(nginx启动配置文件)

        nginx pid file:/usr/local/nginx/logs/nginx.pid(nginx进程号)

        nginx error log file:/usr/local/nginx/logs/error.log:(nginx错误日志文件)

        nginx http access log file:/usr/local/nginx/logs/access.log(访问日志文件)

       

      先关闭防火墙 (测试需要在局域网中访问)

        setenforce 0
        systemctl stop firewalld
        systemctl disable firewalld

         Nginx添加到环境变量

        使用软连接将nginx链接到/usr/local/sbin

        ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin || /usr/local/sbin/ | grep "nginx" 

                   

        显示当前环境变量PATH

          echo $PATH

        编辑.bash_profile文件

          vim ~/.bash_profile

        在.bash_profile文件末尾加入以下内容

          export PATH=$PATH:/usr/local/nginx/sbin

        

        引用.bash_profile文件

          source ~/.bash_profile

        使用nginx命令

        # 启动nginx

          nginx

        # 停止nginx

          nginx -s quit

      

    nginx部分配置

    # 启动该程序的默认程序
    #user  nobody;
    # 一个主进程和多个工作进程。这里定义的是主进程数量
    worker_processes  4;
    
    # 全局错误日志的位置及日志格式
    #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;
    }
    
    # http 服务设置
    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; # 全局日志路径
        # $remote_addr与$http_x_forwarded_for用以记录客户端ip地址
        # $remote_user:记录客户端名称
        # $time_local:记录访问时间与时区
        # $request:记录访问状态 200成功
        # $body_bytes_sent:记录发送给客户端文件主体内容大小
        # $http_referer:记录从哪个页面链接访问过来的
        # $http_user_agent:记录客户端浏览器相关信息
    
        # sendfie指令指定nginx是否调用sendfile函数(zero copy 方式)来输出文件
        sendfile        on;
        # 允许或禁止使用socke的TCP_CORK的选项仅在使用sendfile的时候使用
        #tcp_nopush     on;
        # 长连接超时时间
        #keepalive_timeout  0;
        keepalive_timeout  65;
        # 开启压缩
        #gzip  on;
        # 默认网站  配置虚拟主机
        server {
        # 虚拟主机使用的端口
            listen       80;
        # 主机域名
            server_name  localhost;
        # 支持的字符集
            charset utf-8;
            #访问日志路径
            #access_log  logs/host.access.log  main;
        # 定义web根路径
            location / {
            # 根目录路径
                root   html;
            # 索引页面
                index  index.html index.htm;
            }
    
        # 访问控制目录
        location /a {
            # 允许访问
            allow  127.0.0.0;
            # 不允许
            deny  all;
            # return 404;
            return  http://www.baidu.com;
        }    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            # 根据错误码返回对应的页面
            error_page   500 502 503 504  /50x.html;
            # 
        location = /50x.html {
                root   html;
            }
    
        }
    }
    View Code

      

      如果修改了配置文件先进入nginx目录中:cd /usr/local/nginx ,在执行:./sbin/nginx -g ./conf/nginx.conf 检测配置文件是否正确

      修改配置重启nginx 方式一:

        先执行:killall nginx

        在执行:cd /usr/local/nginx 执行:./sbin/nginx

      修改配置重启nginx 方式一:

        killall -s HUP nginx (重新加载配置文件)

      nginx访问目录配置

        注意:访问控制目录中的location /a{} 这里的location值得就是 web根路径中的root路径

        # 定义web根路径
            location / {
            # 根目录路径
                root   html;
            # 索引页面
                index  index.html index.htm;
            }
    
        # 访问控制目录
        location /a {
            # 允许访问
            allow  127.0.0.0;
            # 不允许
            deny  all;
            # return 404;
            return  http://www.baidu.com;
        }    

     Nginx日志管理

       Nginx访问日志主要有两个参数控制

        1:log_format 用来定义日志格式,可以定义多种日志格式,取不同名字即可

        2:access_log 用来指定日志文件路径及使用何种日志格式记录日志

       

      log_format格式变量:

        # access_log logs/access.log main; # 全局日志路径

        # $remote_addr与$http_x_forwarded_for用以记录客户端ip地址

      `   # $remote_user:记录客户端名称
        # $time_local:记录访问时间与时区
        # $request:记录访问状态 200成功
        # $body_bytes_sent:记录发送给客户端文件主体内容大小
        # $http_referer:记录从哪个页面链接访问过来的
        # $http_user_agent:记录客户端浏览器相关信息

       

       自定义格式为json格式:  

       # 自定义日志格式
        # log_format default_fmt '[$time_local] $remote_addr "$request"'
        # 自定义json日志格式
        log_format default_fmt_json '{"@timestamp":"$time_local",'
                                    '"client_ip":"$remote_addr",'
                                    '"request":"$request",'
                                    '"status":"$status",'
                                    '"bytes":"$body_bytes_sent",'
                                    '"x_forwarded":"$http_x_forwarded_for",'
                                    '"referer":"$http_referer"'
                                    '}';

      两种格式测试效果如下:

        

    Nginx图片防盗链

       

            # 防盗链(只针对b目录)
            # location /b {
            # 项目中以下文件后缀
            location ~* .(png|gif|bmp|jpg|jpeg)$ {
            valid_referers none blocked *.ticp.net;
            if ($invalid_referer){
                    return 403;
            }
            }

    Nginx虚拟主机

        一个web服务器软件默认情况下只能发布一个web,因为一个web分享出去需要三个条件(IP、Port、Domain name)

        虚拟主机就是把一台物理服务器划分成多个虚拟服务器,每个虚拟主机都可以有独立的域名和独立的目录。

        

      1:基于IP的虚拟主机

        准备:

          1:在nginx根目录下准备两个网站如:

            /usr/local/nginx/html/web1/index.html

            /usr/local/nginx/html/web1/index.html

          2:添加一个子IP,使用逻辑网卡添加一个 自网卡的方式

            添加网卡:ifconfig ens33:1 192.168.0.131/24 up

            删除网卡:ifconfig ens33:1 down

          

       基于IP虚拟主机nginx配置信息 (/usr/local/nginx/conf/nginx.conf)

        

    user centos;
    worker_processes  4;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        
        log_format default_fmt_json '{"@timestamp":"$time_local",'
                        '"client_ip":"$remote_addr",'
                    '"request":"$request",'
                    '"status":"$status",'
                    '"bytes":"$body_bytes_sent",'
                    '"x_forwarded":"$http_x_forwarded_for",'
                    '"referer":"$http_referer"'
                    '}';    
        sendfile        on;
        keepalive_timeout  65;
        server {
            listen       192.168.0.130:80;
            server_name  localhost;
            charset utf-8;
            access_log  logs/host.access.log  default_fmt_json;
            location / {
                root   html/web1;
                index  index.html index.htm;
            }
        }
        server {
            listen       192.168.0.131:80;
            server_name  localhost;
            charset utf-8;
            access_log  logs/host.access.log  default_fmt_json;
            location / {
                root   html/web2;
                index  index.html index.htm;
            }
        }
    }

      重启nginx 测试 (先:killall nginx 在:../sbin/nginx )

       

      

       2:基于端口的虚拟主机(只需要修改配置即可)

    user centos;
    worker_processes  4;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        
        log_format default_fmt_json '{"@timestamp":"$time_local",'
                        '"client_ip":"$remote_addr",'
                    '"request":"$request",'
                    '"status":"$status",'
                    '"bytes":"$body_bytes_sent",'
                    '"x_forwarded":"$http_x_forwarded_for",'
                    '"referer":"$http_referer"'
                    '}';    
        sendfile        on;
        keepalive_timeout  65;
        server {
            listen       80;
            #server_name  localhost;
            charset utf-8;
            access_log  logs/host.access.log  default_fmt_json;
            location / {
                root   html/web1;
                index  index.html index.htm;
            }
        }
        server {
            listen       8080;
            #server_name  localhost;
            charset utf-8;
            access_log  logs/host.access.log  default_fmt_json;
            location / {
                root   html/web2;
                index  index.html index.htm;
            }
        }
    }
    View Code

        

         测试

        

       3:基于域名的虚拟主机配置文件

        

    Nginx反向代理

        代理服务器,客户在发送请求的时候,不会直接发送给目的主机,而是先发送给代理服务器,代理服务器接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器硬盘中,在发送给客户机

        

        应用场景:

            堡垒机场景

            内网服务器发布场景

            缓存场景

            

            

        

        代理服务器原理:

               

         代理配置文件  

    user centos;
    worker_processes  4;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        
        log_format default_fmt_json '{"@timestamp":"$time_local",'
                        '"client_ip":"$remote_addr",'
                    '"request":"$request",'
                    '"status":"$status",'
                    '"bytes":"$body_bytes_sent",'
                    '"x_forwarded":"$http_x_forwarded_for",'
                    '"referer":"$http_referer"'
                    '}';    
        sendfile        on;
        keepalive_timeout  65;
        server {
            listen       80;
            #server_name  localhost;
            charset utf-8;
            access_log  logs/host.access.log  default_fmt_json;
            location / {
                proxy_pass http://wendj.ticp.net;
            }
        }
    }
    View Code

        

    Nginx限速

          Nginx官方版本限制IP的链接和并发分别有两个模块

            limit_req_zone:用来限制单位时间内的请求数,即速率限制。

            limit_req_conn:用来限制同一时间连接数,即并发限制。

             

       Nginx中URL重写

          rewrite模块(ngx_http_rewrite_module)

          Rewrite功能是Nginx服务器提供的一个重要功能。几乎所有的web产品必备技能,用于实现URL重写。URL重写是非常常用的功能,比如它可以在我们改变网站结构后,不需要客户端修改原来的书签,也不需要其它网站吸怪对我网站的友情链接,还可以在一定程度上提高网站安全性。

          Nginx服务器Rewrite功能是依赖于PCRE(PerlCompatibleRegularExpression)

          

    Nginx优化

        Nginx是主进程+工作进程模型

        worker_processes 1:工作进程数量,按CPU的总核心调整

        worker_cpu_affinity 0001 0100 1000:CPU的亲和力

        worker_connections 1024:一个工作进程的并发数

      查看CPU核数指令:cat /proc/cpuinfo |grep "flags"|wc -l

        

       统计nginx连接数:netstat -antpl|grep nginx|grep ESTABLISHED|wc -l

       

      Nginx长连接

         http协议属于TCP协议

         优化目标:减少三次握手和四次挥手次数

         keepalive_timeout 5:长连接时间

         keepalive_requests 8192:每个长连接接受最大请求数

       Nginx数据压缩

         gzip on;      # 开启压缩

         gzip_proxied any;  # 任何时候都压缩

         gzip_min_length 1k;  # 启用压缩最小文件,小于设置的不会被压缩

            gzip_buffers 4 8k;  # 压缩的缓存区大小

         gzip_comp_level 6;  # 压缩级别1-9数字越大压缩的越好,也越占CPU时间

         gzip_types text/plain text/css application/x-javascript application/javascript application/xml;  # 压缩文件类型

       Nginx客户端缓存

         location ~* .(png|gif|jpg|jpeg)${

         expires 1h;

         }

      

      Nginx参考文章

      

  • 相关阅读:
    Java 中的传值与传引用
    UML中的类图及类图之间的关系
    [转]多线程下单例模式惰性加载
    中缀表达式转后缀表达式,Java实现
    自用Intellij IDEA设置
    [转]JavaScript将MyBatis打印的日志转化为可执行sql
    SpringBoot利用poi导出excel下载
    详解 HiveUDF 函数
    最全的 Java 知识总结- Github 日增 10 star
    最好用的 Kafka Json Logger Java客户端,赶紧尝试一下
  • 原文地址:https://www.cnblogs.com/wendj/p/15403357.html
Copyright © 2020-2023  润新知