nginx学习笔记 | 一次配置Nginx的踩坑填坑记录

前言

这些天发现自己在服务器上部署的nginx服务常常需要清除浏览器历史记录之后才会刷新信息,搜索一番发现有网友说要把配置文件中的nginx.conf中的sendfile参数改为off,尝试之后发现还是不行,一番操作无果,我决定重装一遍nginx,本来以为会很顺利,没想到这次遇到了很多坑,这一篇就写来总结总结一下。

安装篇

yum安装

1、安装前准备

yum install yum-utils

2、添加源

cd /etc/yum.repos.d/ #到`/etc/yum.repos.d/` 目录下
sudo vim nginx.repo #新建`nginx.repo `文件

输入以下信息

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key

通过yum search nginx看看是否已经添加源成功。如果成功则执行下列命令安装nginx。

yum install nginx

源码安装

Nginx 源码包安装方式步骤比较繁琐,并且需要提前安装一些 Nginx 依赖库。

1、依赖库安装

sudo yum -y install gcc gcc-c++ # nginx 编译时依赖 gcc 环境
sudo yum -y install pcre pcre-devel # 让 nginx 支持重写功能
sudo yum -y install zlib zlib-devel # zlib 库提供了很多压缩和解压缩的方式,nginx 使用 zlib 对 http 包内容进行 gzip 压缩
sudo yum -y install openssl openssl-devel # 安全套接字层密码库,用于通信加密

以上安装完成后,进行 nginx 源码的安装。

2、nginx 源码包安装

切换至/usr/local目录下,通过wget安装,源码包下载地址:nginx.org/en/download…

sudo wget http://...
sudo tar -zxvf  nginx-1.11.5.tar.gz # 解压缩

在完成解压缩后,进入 nginx-1.11.5 目录进行源码编译安装。

sudo mv nginx-1.11.5 nginx
cd nginx
sudo ./configure --prefix=/usr/local/nginx # 检查平台安装环境
# --prefix=/usr/local/nginx  是 nginx 编译安装的目录(推荐),安装完后会在此目录下生成相关文件

如果前面的依赖库都安装成功后,执行 ./configure --prefix=/usr/local/nginx 命令会显示一些环境信息。如果出现错误,一般是依赖库没有安装完成,可按照错误提示信息进行所缺的依赖库安装。

进行源码编译并安装 nginx

make # 编译
make install # 安装

⚠️ make install这一步出现错误cp: conf/koi-win’ and /usr/local/nginx/conf/koi-win’ are the same file

则在上一步sudo ./configure的命令换成

./configure –prefix=/usr/local/nginx –conf-path=/usr/local/nginx/nginx.conf  

源码包安装与 yum 安装的 nginx 服务操作命令也不同。

/usr/local/nginx/sbin/nginx #启动服务
/usr/local/nginx/sbin/nginx -s reload #重新加载服务
/usr/local/nginx/sbin/nginx -s stop #停止服务
ps -ef | grep nginx # 查看服务进程

⚠️ nginx启动失败Redirecting to /bin/systemctl start nginx.service Failed to start nginx.service: Unit not found.

如果你想使用service工具控制nginx的启动关闭,出现这个错误,原因是nginx没有添加到系统服务,手动手动添加一个即可。可以参考下面的操作:

/etc/init.d/下创建名为nginx的启动脚本即可,内容如下:

#!/bin/bash
#
# chkconfig: - 85 15
# description: Nginx is a World Wide Web server.
# processname: nginx

nginx=/usr/local/nginx/sbin/nginx
conf=/usr/local/nginx/conf/nginx.conf
case $1 in
start)
echo -n "Starting Nginx"
$nginx -c $conf
echo " done"
;;
stop)
echo -n "Stopping Nginx"
killall -9 nginx
echo " done"
;;
test)
$nginx -t -c $conf
;;
reload)
echo -n "Reloading Nginx"
ps auxww | grep nginx | grep master | awk '{print $2}' | xargs kill -HUP
echo " done"
;;
restart)
$0 stop
$0 start
;;
show)
ps -aux|grep nginx
;;
*)
echo -n "Usage: $0 {start|restart|reload|stop|test|show}"
;;
esac

注意,保存一定要保存成UNIX格式(notepad++:编辑–文档格式转换–转为UNIX格式),否则会报错的(no such file or directory)

设置执行权限:chmod +x /etc/init.d/nginx

注册成服务:chkconfig -add nginx

设置开机启动:chkconfig nginx on

之后,就可以使用以下命令了

service nginx start/stop/restart/reload

后记

更多关于nginx使用的文章可以康康我在博客园的文章:

Linux学习笔记 | 配置nginx


1337 字