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