• skills_nginx


    1 配置防火墙开放80端口的访问

    Nginx提供HTTP访问所监听的是80端口。

    1.1 centos6中的方法

    # 方法一、设置防火墙对于来自外部访问的请求,如果是TCP协议和80端口,则接受访问
    iptables -I INPUT -p tcp --dport 80 -j ACCEPT
    # 上述命令在重启系统或者iptables服务后失效,必须要保存该配置到防火墙规则中
    service iptables save
    
    # 方法二、直接禁用并禁止开机启动防火墙服务
    service iptables stop
    chkconfig iptables off 
    

    1.2 centos7中的方法

    # 方法一、设置防火墙对于来自外部访问的请求,如果是TCP协议和80端口,则接受访问(暂不用)
    
    # 方法二、直接禁用并禁止开机启动防火墙服务
    systemctl stop firewalld.service
    systemctl disable firewalld.service
    

    2 nginx添加到系统服务

    2.1 centos6中

    service命令实际上是调用了/etc/init.d 目录下的shell脚本,也就是说,如下两行命令是等价的(以network服务为例):

    /etc/init.d/network restart
    service network restart
    

    在上述命令中,network是shell脚本的文件名,restart是传递给脚本的参数。因此,将nginx添加到系统服务中,只需要在/etc/init.d/中编写一个文件名为nginx的shell脚本即可:

    vim /etc/init.d/nginx
    
    #!/bin/bash
    # chkconfig: 2345 85 15
    
    DAEMON=/usr/local/nginx/sbin/nginx
    case "$1" in
      start)
        echo "Starting nginx daemon..."
        $DAEMON && echo "SUCCESS"
      ;;
    
      stop)
        echo "Stopping nginx daemon..."
        $DAEMON -s quit && echo "SUCCESS"
      ;;
    
      reload)
        echo "Reloading nginx daemon..."
        $DAEMON -s reload && echo "SUCCESS"
      ;;
    
      restart)
        echo "Restarting nginx daemon..."
        $DAEMON -s quit
        $DAEMON && echo "SUCCESS"
      ;;
    
      status)
        # echo "$(ps aux | grep -c -e 'nginx:s(master|worker)sprocess')"
        # echo "$(ps aux | grep -e 'nginx:s(master|worker)sprocess')"
        if [ $(ps aux | grep -c -e 'nginx:s(master|worker)sprocess') -ge 2 ];then
          echo "nginx daemon is running..."
        elif [ $(ps aux | grep -c -e 'nginx:s(master|worker)sprocess') -eq 0 ];then
          echo "nginx daemon is dead..."
        fi
      ;;
    
      * )
        # echo "Usage: systemctl {start|stop|restart|reload} nginx"
        echo "Usage: service nginx {start|stop|restart|reload|status}"
        exit 2
      ;;
    esac
    

    2.2 centos7,centos8中

    首先,也可以用和centos6相同的方法,centos7中自带service命令。
    不过centos8中默认没有service命令了,需要手动安装,以下是安装方法:

    [root@2cabcd9b34f1 nginx]# yum list | grep initscripts
    Failed to set locale, defaulting to C.UTF-8
    initscripts.x86_64                                   10.00.4-1.el8                                     BaseOS
    
    # 上面给出了可安装软件的yum源版本。
    # 上面是目前系统已安装的initscripts情况,因为没有了service文件,
    # 显然已经出现了错误,然后执行下面的安装命令:
    yum -y install initscripts
    

    还可用以下方法:
    第一步:进入到/lib/systemd/system/目录
    [root@iz2z init.d]# cd /lib/systemd/system/
    第二步:创建nginx.service文件,并编辑

    vim nginx.service
    
    [Unit]
    Description=nginx service
    After=network.target
    
    [Service]
    Type=forking
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s quit
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    

    Description:描述服务
    After:描述服务类别
    [Service]服务运行参数的设置
    Type=forking是后台运行的形式
    ExecStart为服务的具体运行命令
    ExecReload为重启命令
    ExecStop为停止命令
    PrivateTmp=True表示给服务分配独立的临时空间
    注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
    [Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3

    3 nginx设置开机自动启动

    3.1 centos6中

    需要在/etc/init.d/nginx脚本文件中添加对chkconfig的支持:
    vim /etc/init.d/nginx
    在第二行添加如下语句:
    # chkconfig: 35 85 15
    注:上述语句的冒号后的35,表示Nginx服务允许的启动级别时3和5,如暂不开启任何启动级别,则用 - 代替;
    85和15设置nginx服务的启动(S)顺序和关闭(K)顺序,即S85和K15.数值小的先执行,数值大的后执行。该值是用户自定义的,取值范围为0 - 99.
    然后,添加Nginx服务开机自启动,执行如下命令:chkconfig --add nginx
    查看是否添加成功命令:chkconfig --list

    3.2 centos7,centos8中

    首先,也可以用和centos6相同的方法,不过,在docker的centos8容器中,无法使用chkconfig设置开机自动启动!

    还可用以下方法:
    systemctl enable nginx
    如果不想开机自启动了,可以使用下面的命令取消开机自启动
    systemctl disable nginx

    注:服务的启动/停止/刷新配置文件/查看状态

    systemctl start nginx.service          # 启动nginx服务
    systemctl stop nginx.service           # 停止服务
    systemctl restart nginx.service        # 重新启动服务
    systemctl list-units --type=service     # 查看所有已启动的服务
    systemctl status nginx.service          # 查看服务当前状态
    systemctl enable nginx.service          # 设置开机自启动
    systemctl disable nginx.service         # 停止开机自启动 
    

    一个常见的错误:Warning: nginx.service changed on disk. Run 'systemctl daemon-reload' to reload units.
    直接按照提示执行命令 systemctl daemon-reload 即可。

    4 制作nginx开机启动的docker镜像,并启动容器

    # 制作nginx开机启动的docker镜像
    docker commit -a "Witt Zhang" -m "基于centos8官方镜像,定制nginx镜像,安装了vim,ping,ifconfig,curl,gcc,openssl,gd,pcre等命令" -p nginx1 centos8-nginx-custom:v1.0
    docker commit -a "Witt Zhang" -m "基于centos8官方镜像,定制nginx镜像,设置nginx开机自动启动" -p nginx1 centos8-nginx-custom:v2.0
    # 启动3个容器(注意必须要--privileged=true参数,启动命令必须是/sbin/init)
    docker run -dti --name nginx1 --privileged=true -p :8001:80 -v volume_nginx:/usr/apps/ centos8-nginx-custom:v2.0 /sbin/init
    docker run -dti --name nginx2 --privileged=true -p :8002:80 -v volume_nginx:/usr/apps/ centos8-nginx-custom:v2.0 /sbin/init
    docker run -dti --name nginx3 --privileged=true -p :8003:80 -v volume_nginx:/usr/apps/ centos8-nginx-custom:v2.0 /sbin/init
    # 进入3个容器的命令行
    docker exec -ti nginx1 bash
    docker exec -ti nginx2 bash
    docker exec -ti nginx3 bash
    

    5 nginx每天定时自动备份日志功能:

    # 1)创建备份脚本
    cd /usr/local/nginx/logs/
    
    vim autolog.sh
    
    #!/bin/bash
    # 当前nginx日志存放目录
    logs_path="/usr/local/nginx/logs"
    # 备份日志文件
    mv $logs_path/access.log $logs_path/access`date +"%Y%m%d%H%M"`.log
    # 重新打开nginx日志
    /usr/local/nginx/sbin/nginx -s reopen
    
    # 2)赋予脚本执行权限
    chmod +x autolog.sh
    
    # 3)系统定时自动备份
    crontab -e
    0 0 * * * /usr/local/nginx/logs/autolog.sh > /dev/null 2>&1
    

    6 设置开机自动创建ip别名

    由于ifconifg和route命令重启后失效,所以要设置开机自动运行这两个命令

    vim /etc/rc.local

    在文件末尾添加以下命令

    ifconfig eth0:1 172.17.0.12 broadcast 172.17.255.255 netmask 255.255.0.0 up
    route add -host 172.17.0.12 dev eth0:1
    ifconfig eth0:2 172.17.0.22 broadcast 172.17.255.255 netmask 255.255.0.0 up
    route add -host 172.17.0.22 dev eth0:2

    如果该方法无效,则按照以下方法操作:

    如果下方命令没有输出结果
    #systemctl list-dependencies multi-user.target | grep rc-local
    执行下方命令
    chmod +x /etc/rc.d/rc.local(实测,执行完该命令后,就生效了)
    systemctl daemon-reload
    再次执行命令
    systemctl list-dependencies multi-user.target | grep rc-local
    输出结果:● ├─rc-local.service
    

    参考链接:https://blog.csdn.net/baiihcy/article/details/54577770

    7 tomcat添加到系统服务

    7.1 centos6中

    第一步:在/etc/init.d/中编写一个文件名为tomcat的shell脚本:

    vim /etc/init.d/tomcat
    
    #!/bin/bash
    # chkconfig: 35 85 15
    export JRE_HOME=/usr/develop/jdk1.8.0_231
    case "$1" in
      start)
        echo "Starting tomcat ..."
        sudo -E -u nobody /usr/develop/apache-tomcat-8.5.50/bin/startup.sh
      ;;
    
      stop)
        echo "Stopping tomcat ..."
        /usr/develop/apache-tomcat-8.5.50/bin/shutdown.sh
      ;;
    
      restart)
        echo "Restarting tomcat ..."
        $0 stop
        $0 start
      ;;
    
      * )
        # echo "Usage: systemctl {start|stop|restart|reload} tomcat" 
        echo "Usage: service tomcat {start|stop|restart}"
        exit 2
      ;;
    esac
    

    第二步:启动tomcat时,使用sudo -E -u nobody,表示以nobody用户身份运行并维持当前设置的环境变量;使用nobody用户身份运行tomcat,可以避免直接使用root身份运行所带来的安全风险(即最小权限原则)。 为了让nobody用户获得tomcat目录的操作权限,需要设置目录的所属用户和组:chown -R nobody:nobody /usr/develop/apache-tomcat-8.5.50
    第三步:设置tomcat服务的执行权限:chmod +x /etc/init.d/tomcat

    7.2 centos7,centos8中

    首先,也可以用和centos6相同的方法,centos7中自带service命令。
    不过centos8中默认没有service命令了,需要手动安装,安装方法略(前面说了)。

    还可用以下方法:(由于第一种方法有效,所以未测试这种方法)
    第一步:进入到/lib/systemd/system/目录
    [root@iz2z init.d]# cd /lib/systemd/system/
    第二步:创建tomcat.service文件,并编辑

    vim tomcat.service
    
    [Unit]
    Description=tomcat service
    After=network.target
    
    [Service]
    Type=forking
    ExecStart=sudo -E -u nobody /usr/develop/apache-tomcat-8.5.50/bin/startup.sh
    #ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/develop/apache-tomcat-8.5.50/bin/shutdown.sh
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    

    Description:描述服务略(前面说了)。

    8 tomcat设置开机自动启动

    8.1 centos6中

    需要在/etc/init.d/tomcat脚本文件中添加对chkconfig的支持:
    vim /etc/init.d/tomcat
    在第二行添加如下语句:
    # chkconfig: 35 85 15
    然后,添加tomcat服务开机自启动,执行如下命令:chkconfig --add nginx
    查看是否添加成功命令:chkconfig --list

    8.2 centos7,centos8中

    首先,也可以用和centos6相同的方法。

    还可用以下方法:(由于第一种方法有效,所以未测试这种方法)
    systemctl enable tomcat
    如果不想开机自启动了,可以使用下面的命令取消开机自启动
    systemctl disable tomcat

    注:服务的启动/停止/刷新配置文件/查看状态

    systemctl start tomcat.service          # 启动nginx服务
    systemctl stop tomcat.service           # 停止服务
    systemctl restart tomcat.service        # 重新启动服务
    systemctl list-units --type=service     # 查看所有已启动的服务
    systemctl status tomcat.service          # 查看服务当前状态
    systemctl enable tomcat.service          # 设置开机自启动
    systemctl disable tomcat.service         # 停止开机自启动 
    

    9 查看nginx安装了哪些模块

    执行:nginx -V

    10 nginx的一些第三方模块下载地址

    echo-nginx-module:https://github.com/mediocrePeople/nginx-upstream-fair
    echo-nginx-module:https://codeload.github.com/openresty/echo-nginx-module/tar.gz/v0.62rc1

    11 curl用法

    curl  https://www.baidu.com # 返回 response body  
    curl -i  https://www.baidu.com # 返回response header 和 response body  
    curl -I https://www.baidu.com  # 返回response header  
    curl  -v  https://www.baidu.com # 返回 request header   request body   response header   response body  
    

    12

    13

  • 相关阅读:
    XCode下Swift – WebView IOS demo
    swift-初探webView与JS交互
    Swift 实践之UIWebView
    iOS 权限判断 跳转对应设置界面
    iOS~判断应用是否有定位权限
    iOS 判断是否有权限访问相机,相册
    UIAlertController中TextField的用法
    Swift-UITextField用法
    多年iOS开发经验总结(一)
    Python lambda和reduce函数
  • 原文地址:https://www.cnblogs.com/mediocreWorld/p/15188356.html
Copyright © 2020-2023  润新知