首页 资讯 社群 我的社区 搜索

nginx入门笔记--写nginx安装脚本中发现的问题记录和CentOS下的防火墙操作

高大上
2018-12-21 10:17:30

      前两天验证了nginx的手工安装和在项目中的使用。确认是没有问题的,但是nginx安装笔记麻烦。考虑到现场实施可能没有网络,时间也比较紧张。写了个脚本来安装nginx,这记录下中间遇到的问题。后面附上安装脚本!

       这里主要介绍两个问题:1.是rpm包的获取方式,2.是关于防火墙的配置问题。想直接获取安装脚本的同学可以直接跳到最后面。

      考虑到实施环境可能没有外网,且源不同拉下来的安装版本可能也不一致。这里使用rpm包安装,避免这些问题。那么rpm包如何获取呢?

       我们可以现在有网的机器上使用命令:

# yum -y install 包名称 --downloadonly --downloaddir=./下载路径。

       该命令会将rpm包下载都指定的路径下,但是不执行安装。yum会执行处理包依赖关系,安装时不会出现无法匹配的情况。我们在将包文件拷贝出来就可以了。

       注意:这种方式拉去的rpm包虽然不会出现依赖问题,但是执行rpm *.rpm安装时并不能保证安装顺序。请添加参数--nodeps --force,例如:

# rpm -ivh *.rpm --nodeps --force;#忽略安装过程中的依赖检查

      在本次安装过程中还发现一个问题:nginx在centos 7下安装完成后开放监听端口但是无法访问的情况。csdn大部分的帖子给出的方案是关闭防火墙或者改用iptables。前者不可取,后者答对了一半。我在这个地方也饶了好久,还好有群里的大神提点才爬出来!!

      在解决这个问题前,我们需要先了解firewall和iptables的区别。

      CentOS 7上默认firewall为防火墙配置,但是在7以前是iptables。我们可以简单的理解为:firewall模式下默认所有规则都是不被允许的,而添加的每条策略都是独立的,添加后立刻生效。iptables默认每个服务都是允许的,需要拒绝才去做限制。而添加的策略从上到下匹配,匹配到任意一条就结束。如果你添加的允许策略在禁止策略下面,添加了也无效。

      因此,建议将被nginx代理的server改为iptables,只有nginx才能访问,其他客户端就无法绕过nginx访问服务了。

      还有一点,在配置完firewall后一定要执行systemctl restart firewalld.service,否则nginx无法访问。按道理来说firewall下开放端口是不需要重新加载防火墙的,但是nginx非要重启后才能访问到,原理我也没搞明白。有知道原因的顺便也告诉我下!!!!

      这里记录下关于防火墙的常用操作:

# firewall 端口配置
firewall-cmd --zone=public --add-port=80/tcp --permanent         #开放端口(--permanent永久生效,没有此参数重启后失效)
firewall-cmd --reload                                            #重新载入规则
firewall-cmd --zone= public --query-port=80/tcp                  #查看端口是否开放
firewall-cmd --zone= public --remove-port=80/tcp --permanent     #取消开放端口

# firewall的具体命令
systemctl start firewalld.service          # 启动
systemctl restart firewalld.service        # 重启
systemctl enable firewalld.service         # 开机启动
systemctl stop firewalld.service           # 关闭
systemctl disable firewalld.service        # 取消开机启动
firewall-cmd --state                       #查看默认防火墙状态


#配置iptables端口,
vim /etc/sysconfig/iptables

A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT #开放80端口

#重启iptables服务
systemctl restart iptables.service     #重启iptables服务  
systemctl enable iptables.service     #设置iptables服务开机启动  
systemctl status iptables.service      #查询防火墙状态  
systemctl stop iptables.service        #停止防火墙  
systemctl start iptables.service       #启动防火墙  
systemctl restart iptables.service    #重启防火墙  
chkconfig iptables off                     #永久关闭防火墙  
chkconfig iptables on                     #永久关闭后启用  

下面是安装脚本,同时附上安装包下载地址:

链接: https://pan.baidu.com/s/1EFJiDsaEIhDQCf8qGKabdg 提取码: gm3n 

#nginx安装脚本
#!/bin/bash
if [ `whoami` != "root" ];then
	echo "Error: need root user run this command!"
	exit 1
fi
os=`cat /etc/redhat-release`

if [[ $os =~ 'CentOS' ]]&&[[ $os =~ '7' ]]; then 
	#var
	rpmPath=`pwd`
	ip="localhost"
	#安装编译工具和库文件
	echo 'Install compiler tools and lib Libraries!'
	chmod 777 -R ../idp-nginx;
	cd ./libPage;
	rpm -ivh *.rpm --nodeps --force;
	cd $rpmPath
	#解压,编译安装PCRE库
	tar zxvf pcre-8.35.tar.gz;
	cd pcre-8.35;
	pcrePath=`pwd`
	./configure;
	make && make install;
	cd $rpmPath
	#解压,编译安装nginx
	tar zxvf nginx-1.6.2.tar.gz
	cd nginx-1.6.2
	./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=$pcrePath
	make;
	make install;
	nginxVersion=`/usr/local/webserver/nginx/sbin/nginx -v`
	echo $nginxVersion
	cd $rpmPath;
	#强制替换nginx配置文件
	cp -r nginx.conf /usr/local/webserver/nginx/conf/
	echo "是否开启80端口?输入1开启,其他均为放弃"
	read var
	case $var in
	"1")
	    firewall-cmd --zone=public --add-port=80/tcp --permanent
		#firewall-cmd --zone=public --add-port=8080/tcp --permanent
		echo "80端口以开放!";;
	esac	
	#重启防火墙
	systemctl restart firewalld.service;
	#提示安装完成
	echo 'install nginx finished'

else
	echo "Error:only suppose centos7!"
	exit 1
fi
	
用户评论