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

posted @ 2021-08-26 10:29  mediocrep  阅读(48)  评论(0编辑  收藏  举报
既然选择了远方,便只顾风雨兼程!