首页 > 其他分享 >第十周

第十周

时间:2024-04-14 19:22:23浏览次数:18  
标签:http log 第十 -- server nginx root

第十周

  1. 完成nginx编译安装脚本
    #!/bin/bash
     
    NGINX_VERSION=1.22.1
    NGINX_FILE=nginx-${NGINX_VERSION}.tar.gz
    NGINX_URL=http://nginx.org/download/
    NGINX_INSTALL_DIR=/apps/nginx
    SRC_DIR=/usr/local/src
    CPUS=`lscpu |awk '/^CPU\(s\)/{print $2}'`
     
    . /etc/os-release
     
    color () {
        RES_COL=60
        MOVE_TO_COL="echo -en \\033[${RES_COL}G"
        SETCOLOR_SUCCESS="echo -en \\033[1;32m"
        SETCOLOR_FAILURE="echo -en \\033[1;31m"
        SETCOLOR_WARNING="echo -en \\033[1;33m"
        SETCOLOR_NORMAL="echo -en \E[0m"
        echo -n "$1" && $MOVE_TO_COL
        echo -n "["
        if [ $2 = "success" -o $2 = "0" ] ;then
            ${SETCOLOR_SUCCESS}
            echo -n $"  OK  "    
        elif [ $2 = "failure" -o $2 = "1"  ] ;then 
            ${SETCOLOR_FAILURE}
            echo -n $"FAILED"
        else
            ${SETCOLOR_WARNING}
            echo -n $"WARNING"
        fi
        ${SETCOLOR_NORMAL}
        echo -n "]"
        echo 
    }
     
    check () {
        [ -e ${NGINX_INSTALL_DIR} ] && { color "nginx 已安装,请卸载后再安装" 1; exit; }
        cd  ${SRC_DIR}
        if [  -e ${NGINX_FILE}${TAR} ];then
            color "相关文件已准备好" 0
        else
            color '开始下载 nginx 源码包' 0
            wget ${NGINX_URL}${NGINX_FILE}${TAR} 
            [ $? -ne 0 ] && { color "下载 ${NGINX_FILE}${TAR}文件失败" 1; exit; } 
        fi
    } 
     
    install () {
        color "开始安装 nginx" 0
        if id nginx  &> /dev/null;then
            color "nginx 用户已存在" 1 
        else
            useradd -s /sbin/nologin -r  nginx
            color "创建 nginx 用户" 0 
        fi
        color "开始安装 nginx 依赖包" 0
        if [ $ID == "centos" ] ;then
    	    if [[ $VERSION_ID =~ ^7 ]];then
                yum -y  install  gcc  make pcre-devel openssl-devel zlib-devel perl-ExtUtils-Embed
    		elif [[ $VERSION_ID =~ ^8 ]];then
                yum -y  install make gcc-c++ libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel perl-ExtUtils-Embed 
    		else 
                color '不支持此系统!'  1
                exit
            fi
         elif [ $ID == "rocky"  ];then
    	    yum -y  install gcc make gcc-c++ libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel perl-ExtUtils-Embed 
         else
            apt update
            apt -y install gcc make  libpcre3 libpcre3-dev openssl libssl-dev zlib1g-dev
         fi
         [ $? -ne 0 ] && { color "安装依赖包失败" 1; exit; } 
         cd $SRC_DIR
         tar xf ${NGINX_FILE}
         NGINX_DIR=`echo ${NGINX_FILE}| sed -nr 's/^(.*[0-9]).*/\1/p'`
         cd ${NGINX_DIR}
         ./configure --prefix=${NGINX_INSTALL_DIR} --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module 
         make -j $CPUS && make install 
         [ $? -eq 0 ] && color "nginx 编译安装成功" 0 ||  { color "nginx 编译安装失败,退出!" 1 ;exit; }
    	 chown -R nginx.nginx ${NGINX_INSTALL_DIR}
         ln -s ${NGINX_INSTALL_DIR}/sbin/nginx /usr/local/sbin/nginx
         echo "PATH=${NGINX_INSTALL_DIR}/sbin:${PATH}" > /etc/profile.d/nginx.sh
         cat > /lib/systemd/system/nginx.service <<EOF
    [Unit]
    Description=The nginx HTTP and reverse proxy server
    After=network.target remote-fs.target nss-lookup.target
    [Service]
    Type=forking
    PIDFile=${NGINX_INSTALL_DIR}/logs/nginx.pid
    ExecStartPre=/bin/rm -f ${NGINX_INSTALL_DIR}/logs/nginx.pid
    ExecStartPre=${NGINX_INSTALL_DIR}/sbin/nginx -t
    ExecStart=${NGINX_INSTALL_DIR}/sbin/nginx
    ExecReload=/bin/kill -s HUP \$MAINPID
    KillSignal=SIGQUIT
    TimeoutStopSec=5
    KillMode=process
    PrivateTmp=true
    LimitNOFILE=100000
    [Install]
    WantedBy=multi-user.target
    EOF
         systemctl daemon-reload
         systemctl enable --now nginx &> /dev/null 
         systemctl is-active nginx &> /dev/null ||  { color "nginx 启动失败,退出!" 1 ; exit; }
         color "nginx 安装完成" 0
    }
     
    check
     
    install
    
  2. 完成nginx平滑升级,总结步骤
    [root@ubuntu2004 ~]rz -E
    [root@ubuntu200406 ~]ls
    nginx-1.22.1  nginx-1.22.1.tar.gz  nginx-1.24.0.tar.gz  snap
    [root@ubuntu2004 ~]tar xf nginx-1.24.0.tar.gz
    [root@ubuntu2004 ~]ls
    nginx-1.22.1  nginx-1.22.1.tar.gz  nginx-1.24.0  nginx-1.24.0.tar.gz  snap
    [root@ubuntu2004 ~]cd nginx-1.24.0/
    [root@ubuntu2004 nginx-1.24.0]ls
    auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
    #查看当前使用的版本及编译选项。结果如下:
    [root@ubuntu2004 nginx-1.24.0]nginx -V
    nginx version: nginx/1.22.1
    built by gcc 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)
    built with OpenSSL 1.1.1f  31 Mar 2020
    TLS SNI support enabled
    configure arguments: --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_modul
    
  3. 总结nginx核心配置,并实现nginx多虚拟主机

    可以实现在一台服务器虚拟出多个网站。

子配置文件添加虚拟主机,在Nginx主配置文件nginx.conf中的http功能语句块内添加includ字段

include /apps/nginx/conf/conf.d/*.conf;

基于域名的多虚拟主机配置流程
server {
    # 定义网站端口的参数
    listen       80;
    # 填写网站域名的参数
    server_name  www.test1.com;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    #access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main;
    location / {
        # root关键词定义的是 网页根目录的路径
        root   /tmp/test/test1;
        # index参数 定义的是首页文件的名字
        index  index.html index.htm;
    }
}  
server {
    listen 80;
    server_name www.test2.com;
    location / {
        root  /tmp/test/test2/;
        index   index.html;
    }
}

​ 基于不同端口的虚拟主机配置

#第一个站点的配置,监听80端口
server {
    #定义网站端口的参数
    listen       80;
    # 填写网站域名的参数
    server_name  localhost;
    location / {
        # root关键词定义的是 网页根目录的路径
        root   /etc/test/test3;
        # index参数 定义的是首页文件的名字
        index  index.html;
    }
}

 第二个站点的配置,监听81端口
server {
    listen 81;
    server_name  localhost;
    location / {
        root /etc/test/test4;
        index index.html;
    }
}
4.总结nginx日志格式定制

配置需要日志模块 ngx_http_log_module 的支持。 错误日志一般填写在location模块中,日志格式通过 log_format 命令来定义,ginx 日志相关的配置 包括 access_logrewrite_logerror_log

log_format 指令
Nginx 预定义了名为 main 日志格式,如果没有明确指定日志格式将默认使用该格式:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                 '"$http_user_agent" "$http_x_forwarded_for"';
                 
                 
如果不想使用Nginx预定义的格式,可以通过log_format指令来自定义:

# 语法:
log_format name [escape=default|json] string ...;
name 格式名称。在 access_log 指令中引用。
escape 设置变量中的字符编码方式是json还是default,默认是default。
string 要定义的日志格式内容。该参数可以有多个。参数中可以使用Nginx变量。


下面是log_format指令中常用的一些变量:
 
$bytes_sent:发送给客户端的总字节数
 
$body_bytes_sent:发送给客户端的字节数,不包括响应头的大小
 
$connection:连接序列号
 
$connection_requests:当前通过连接发出的请求数量
 
$mses:日志写入时间,单位为秒,精度是毫秒
 
$pipe:如果请求是通过http流水线发送,则其值为“p”,否则为“.”
 
$request_length:请求长度
 
$request_time:请求处理时长
 
$status:响应状态码
 
$time_iso8601:标准格式的本地时间
 
$time_local:通用日志格式下的本地时间
 
$http_referer:请求的referer地址
 
$http_user_agent:客户端浏览器信息
 
$remote_addr:客户端IP
 
$http_x_forwarded_for:当前端有代理服务器时,记录web节点记录客户端地址的配置
 
$request:完整的原始请求行
 
$remote_user:客户端用户名称
 
$request_url:完整的请求地址

access_log
作用域
可以应用access_log指令的作用域分别有http,server,location,也就是说,在这几个作用域外使用该指令,Nginx会报错。

access_log /var/logs/nginx-access.log combined;

error_log 
错误日志在Nginx中是通过error_log指令实现的。该指令记录服务器和请求处理过程中的错误信息。
语法:
配置错误日志文件的路径和日志级别。

error_log file [level];
Default:
error_log logs/error.log error;
file 参数指定日志的写入位置。
level 参数指定日志的级别。level可以是debug, info, notice, warn, error, crit,alert,emerg中的任意值。可以看到其取值范围是按紧急程度从低到高排列的。只有日>志的错误级别等于或高于level指定的值才会写入错误日志中。

error_log  /var/log/nginx/error.log;

配置段:http, mail, stream, server, location作用域。

例子中指定了错误日志的路径为:/var/log/nginx/error.log,日志级别使用默认的 error。
rewrite_log
由ngx_http_rewrite_module模块提供的。用来记录重写日志的。对于调试重写规则建议开启,启用时将在error log中记录重写日志。

rewrite_log on | off;
 
默认值: 
rewrite_log off;

配置段: http, server, location, if作用域。
5.总结 nginx反向代理及https安全加密

反向代理:reverse proxy,指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。

Nginx反向代理模块的指令是由ngx_http_proxy_module模块进行解析

proxy_pass 该指令用来设置被代理服务器地址,可以是主机名称、IP地址加端口号形式
proxy_set_header  该指令可以更改Nginx服务器接收到的客户端请求的请求头信息,然后将新的请求头发送给代理的服务器
proxy_redirect  该指令是用来重置头信息中的"Location"和"Refresh"的值
反向代理单台 Web 服务器
[root@centos8 ~]# cat /apps/nginx/conf/conf.d/pc.conf
server {
  listen 80;
  server_name www.test.org;
  location / {
  proxy_pass http://10.0.0.18/; 
  proxy_set_header Host $http_host; #转发主机头至后端服务器
  proxy_connect_timeout 10s;
  }
}
nginx -s reload   #重启Nginx 并访问测试

Http 反向代理负载均衡

Nginx 可以基于ngx_http_upstream_module模块提供服务器分组转发、权重分配、状态监测、调度算法等高级功能

http upstream 配置参数

范例:

## Basic reverse proxy server ##
upstream backend  {
    server 127.0.0.1:8080; # local server
}

server {
    location / {
        proxy_pass  http://backend;
    }
}

实现负载均衡

[root@centos8 ~]#vim /apps/nginx/conf.d/proxy.conf
upstream websrvs {
     server 10.0.0.101:80 ;
     server 10.0.0.102:80 ;
}
server {
     listen 80;
     server_name www.test.org;
     return 302 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
     server_name www.wang.org;
     ssl_certificate /apps/nginx/ssl/www.wang.org.pem;
     ssl_certificate_key /apps/nginx/ssl/www.wang.org.key;
     ssl_session_cache shared:sslcache:20m;
     ssl_session_timeout 10m;
     location / {
         proxy_pass http://websrvs;
         proxy_set_header Host $http_host;
       }
}

[root@ubuntu2204 conf.d]#vim www.test.org.conf
upstream webservers{
    server 10.0.0.201;
    server 10.0.0.202;
}
server {
    listen 80;
    listen 443 ssl;
    server_name www.wang.org;
    root /data/nginx/html/pc;
    ssl_certificate /apps/nginx/conf/conf.d/ssl/www.wang.org.pem ;
    ssl_certificate_key /apps/nginx/conf/conf.d/ssl/www.wang.org.key ;
    access_log logs/www.wang.org-access.log main;
    location / {
     proxy_pass http://webservers;
     proxy_set_header host $http_host;
      #root /data/nginx/html/pc;
     index index.html;
     if ($scheme = http ) {
         #return 302 https://$server_name$request_uri;
         rewrite ^/(.*) https://$server_name/$1 redirect;
        }
      }
}

1.https简介

HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据

2.https协议原理

首先,客户端与服务器建立连接,各自生成私钥和公钥,是不同的。服务器返给客户端一个公钥,然后客户端拿着这个公钥把要搜索的东西加密,称之为密文,并连并自己的公钥一起返回给服务器,服务器拿着自己的私钥解密密文,然后把响应到的数据用客户端的公钥加密,返回给客户端,客户端拿着自己的私钥解密密文,把数据呈现出来

需要http_ssl_module模块支持

证书和私钥的生成
#自签名CA证书
[root@centos8 ~]# cd /apps/nginx/
[root@centos8 nginx]# mkdir certs
[root@centos8 nginx]# cd certs/
[root@centos8 nginx]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout
ca.key -x509 -days 3650 -out ca.crt #自签名CA证书
Generating a 4096 bit RSA private key
.................++
.....
Country Name (2 letter code) [XX]:CN #国家代码
State or Province Name (full name) []:BeiJing #省份
Locality Name (eg, city) [Default City]:Beijing #城市名称
Organization Name (eg, company) [Default Company Ltd]:wang.Ltd #公司名称
Organizational Unit Name (eg, section) []:wang #部门
Common Name (eg, your name or your server's hostname) []:ca.wang.org #通用名称
Email Address []: #邮箱
[root@centos8 certs]# ll ca.crt
-rw-r--r-- 1 root root 2118 Feb 22 12:10 ca.crt
#自制key和csr文件
[root@centos8 certs]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout
www.wang.org.key -out www.wang.org.csr
Generating a 4096 bit RSA private key
........................................................................++
......
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BeiJing
Locality Name (eg, city) [Default City]:BeiJing
Organization Name (eg, company) [Default Company Ltd]:wang.org
Organizational Unit Name (eg, section) []:wang.org
Common Name (eg, your name or your server's hostname) []:www.wang.org
Email Address []:[email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@centos8 certs]# ll
total 16
-rw-r--r-- 1 root root 2118 Feb 22 12:10 ca.crt
-rw-r--r-- 1 root root 3272 Feb 22 12:10 ca.key
-rw-r--r-- 1 root root 1760 Feb 22 12:18 www.wang.org.csr
-rw-r--r-- 1 root root 3272 Feb 22 12:18 www.wang.org.key
#签发证书
[root@centos8 certs]# openssl x509 -req -days 3650 -in www.wang.org.csr -CA
ca.crt -CAkey ca.key -CAcreateserial -out www.wang.org.crt
#验证证书内容
[root@centos8 certs]# openssl x509 -in www.wang.org.crt -noout -text
Certificate:
Data:
Version: 1 (0x0)
Serial Number:
bb:76:ea:fe:f4:04:ac:06
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=CN, ST=BeiJing, L=Beijing, O=wang.Ltd, OU=wang,
CN=wang.ca/[email protected]
Validity
Not Before: Feb 22 06:14:03 2019 GMT
Not After : Feb 22 06:14:03 2020 GMT
Subject: C=CN, ST=BeiJing, L=BeiJing, O=wang.org, OU=wang.org,
CN=www.wang.org/[email protected]
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)
#合并CA和服务器证书成一个文件,注意服务器证书必须在前,ca证书在后,否则会出错
[root@centos8 certs]#cat www.wang.org.crt ca.crt > www.wang.org.pem
配置文件
server {
    listen 80;
    listen 443 ssl http2;
    server_name www.test.org;
    ssl_certificate /apps/nginx/certs/www.test.org.pem;
    ssl_certificate_key /apps/nginx/certs/www.test.org.key;
    ssl_session_cache shared:sslcache:20m;
    ssl_session_timeout 10m;
    root /data/nginx/html;
}
#重启Nginx并访问验证

标签:http,log,第十,--,server,nginx,root
From: https://www.cnblogs.com/meishijia8/p/18134549

相关文章

  • 华中农业大学第十三届程序设计竞赛
    题目链接Bsyh喜欢猫猫,所以zzy为了哄syh睡觉,决定扮成猫猫。给定一个长为\(n\)的序列\(\{a_i\}\)和三个正整数\(x,y,z\),计算\(\sum_{i=1}^n\sum_{j=1}^na_ia_j\lfloor\dfrac{x\gcd(a_i,a_j)+y}{z}\rfloor\)的值。答案对\(10^9+7\)取模。如果这个问题的答案能够......
  • ETL工具-nifi干货系列 第十一讲 处理器UpdateAttribute使用教程
    1、在这里我们重温下nifi里面一个重要的概念FlowFile,如下图所示:FlowFile:FlowFile代表NiFi中的单个数据。nifi数据流中流动的就是flowfile,每个nifi处理器处理的数据也是基于flowfile的。FlowFile由两个组件组成:FlowFile属性(attribute)和FlowFile内容(content)。内容是FlowFile......
  • 第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组题解
    试题A:握手问题本题总分:\(5\)分思路:组合计数,用为\(50\)个人握手的总方案数\(C^{2}_{50}\),减去七个人彼此没有握手握手的方案数\(C^{2}_{7}\)即为答案。A:握手问题#include<bits/stdc++.h>#defineintlonglong#definedblongdouble#defineall(f)f.begin()......
  • 推荐一个有含金量的榜单赛事——第十四届全国大学生计算机应用能力与数字素养大赛 —
    【榜单赛事】第十四届全国大学生计算机应用能力与数字素养大赛-数字农林赛道正在火热报名中“数字农林”赛道基于国家新工科与新农科背景,契合国家农、林、水数字化建设战略定位,符合新时代大学计算机教育改革发展。本赛道拟在推动各级院校学生将数字化、信息化、智能化技术与......
  • 力扣经典150题第十六题:接雨水
    目录力扣经典150题第十六题:接雨水1.题目描述2.问题分析3.解题思路4.代码实现5.时间复杂度分析6.应用和扩展7.总结8.参考资料力扣经典150题第十六题:接雨水1.题目描述给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少......
  • 力扣经典150题第十五题:分发糖果
    目录力扣经典150题第十五题:分发糖果1.题目描述2.问题分析3.解题思路4.代码实现5.时间复杂度分析6.应用和扩展7.总结8.参考资料力扣经典150题第十五题:分发糖果1.题目描述n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。你需要按照以下......
  • 第十二届蓝桥杯省赛真题(C/C++大学B组)
    目录#A空间#B卡片#C直线#D货物摆放#E路径#F时间显示#G砝码称重#H 杨辉三角形#I双向排序#J括号序列#A空间#include<bits/stdc++.h>usingnamespacestd;intmain(){ cout<<256*1024*1024/4<<endl; return0;}#B卡片#include<bit......
  • 洛谷 官方题库 Python 第十一天
    【数学1】基础数学问题最大公约数gcd=math.gcd(a,b)注意这个gcd支持传入多参数,有两种写法,建议用星号,因为reduce如果a是空数组会报错。注意gcd(a,0)=a,即任意数和0的gcd都是自己,参照循环相减法。gcd(*a)是Python中的一种用法,它可以计算传递给函数gcd()的可变数量的参数的......
  • 力扣经典150题第十三题:除自身以外数组的乘积
    目录力扣经典150题第十三题:除自身以外数组的乘积1.简介2.问题分析3.解题思路方法一:左右乘积列表方法二:优化空间复杂度4.代码实现5.时间复杂度分析6.应用和扩展7.总结8.参考资料力扣经典150题第十三题:除自身以外数组的乘积1.简介本文介绍如何设计一个算......
  • 第十一届蓝桥杯C/C++组C组决赛之思维风暴 快速解题
    十五届蓝桥杯即将开赛,十一届的蓝桥杯国赛的一些巧妙解法。美丽的2 题目描述本题为填空题,只需要算出结果后,在代码中使用输出语包将所填结果输出即可。小蓝特别喜欢2,今年是公元2020年,他特别高兴。他很好奇,在公元1年到公元2020年(包含)中,有多少个年份的数位中包含数字2?......