# 安装 Nginx

Nginx 所有版本下载:http://nginx.org/download/ (opens new window)

# Windows 系统上安装 Nginx

# Linux 系统上安装 Nginx

# Nginx 安装方式一(推荐):从官网下载安装包编译安装

# Linux 一键编译安装 Nginx 脚本

Nginx 所有版本下载:http://nginx.org/download/ (opens new window)

Nginx 生产环境使用版本:

Redis 官方下载站版本 1.18.0:https://download.redis.io/releases/404 (opens new window)

Nginx 官方下载站版本 1.21.5:http://nginx.org/download/404 (opens new window)

达内慕课网版本 1.20.1:https://www.tmooc.cn/404 (opens new window)

达内资源下载站版本 1.4.3:http://code.tarena.com.cn/404 (opens new window)

# 下载 Nginx 安装包
# 部署时从 http://nginx.org/en/download.html 获取最新的 mainline 版本号
nginx_version=1.21.6
yum -y install wget && wget -P /usr/local/src http://nginx.org/download/nginx-${nginx_version}.tar.gz
# 解压 Nginx 安装包
cd /usr/local/src
tar -xvf ./nginx-${nginx_version}.tar.gz
# 安装编译 Nginx 所需要的依赖
yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
cd nginx-${nginx_version}
chmod +x configure
# 编译 Nginx
./configure
make
make install
# 环境变量中配置 Nginx
echo 'export NGINX_HOME=/usr/local/nginx' >> /etc/profile
echo 'export PATH=$NGINX_HOME/sbin:$PATH' >> /etc/profile
source /etc/profile
# 启动 Nginx
nginx
# 如果看到网页输出说明 Nginx 安装成功
curl 127.0.0.1:80
# 允许外网访问 80 端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
# 设置 Nginx 开机自启
echo '/usr/local/nginx/sbin/nginx' >> /etc/rc.local
chmod +x /etc/rc.d/rc.local
# 隐藏 Nginx 版本号
sed -i '/http {/a\    server_tokens off;' /usr/local/nginx/conf/nginx.conf
# 修改完配置后需要重启才能生效
/usr/local/nginx/sbin/nginx -s reload

# 下载 Nginx 安装包

打开 Nginx 官网:http://nginx.org/en/download.html (opens new window)

然后点击 nginx-1.21.6 会自动跳转下载。

image-20220419071242748

尽管 Stable version 是稳定版本,但是在生产服务器上部署的时候建议还是使用最新的 Mainline version,因为所谓的稳定版本只是说修复了一些以前特性的 bug,但是其实并不包含新的一些特性,并且新版本也是基于稳定版本去修改而来的。而且 Nginx 官网也推荐使用 Mainline Version。

具体查看:What's the difference between the "mainline" and "stable" branches of nginx? (opens new window)

如果是在本地下载的,在下载完成后还需要上传到服务器上,上传至目录 /usr/local/src

(推荐)如果服务器可以访问外网,也可以直接在服务器上下载,右键需要下载的版本,然后点击复制链接地址:

image-20220419071929785

在服务器上执行,使用 wget 命令下载至 /usr/local/src

wget -P /usr/local/src http://nginx.org/download/nginx-1.21.6.tar.gz

如果提示 -bash: wget: 未找到命令,需要先执行下面语句安装 wget 命令:

yum -y install wget

# 解压 Nginx 压缩包

cd /usr/local/src
tar -xvf ./nginx-1.21.6.tar.gz

# 安装 Nginx 编译所需要的依赖项

yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

依赖说明:

gcc:gcc 是 Linux 下的编译器,它可以编译 C,C++,Ada,Object C 和 Java 等语言。

pcre:pcre 是一个 perl 库,包括 perl 兼容的正则表达式库,Nginx 的 http 重写模块使用 pcre 来解析正则表达式,所以需要安装 pcre 库。

zlib:zlib 库提供了很多种压缩和解压缩方式 Nginx 使用 zlib 对 http 包的内容进行 gzip,所以需要安装。

openssl:openssl 是 web 安全通信的基石,没有 openssl,可以说我们的信息都是在裸奔。

# 编译安装 Nginx

cd nginx-1.21.6
./configure
make
make install

如果 ./configure 报错没有权限,则执行以下命令:

chmod +x configure

如果出现以下错误,说明没有安装好 gcc 依赖项,[安装 Nginx 编译所需要的依赖项](#安装 Nginx 编译所需要的依赖项)

[root@localhost nginx-1.21.6]# ./configure 
checking for OS
 + Linux 3.10.0-862.el7.x86_64 x86_64
checking for C compiler ... not found

./configure: error: C compiler cc is not found

如果出现以下错误,说明没有安装好 pcre 依赖项,[安装 Nginx 编译所需要的依赖项](#安装 Nginx 编译所需要的依赖项)

./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

如果出现以下错误,说明没有安装好 zlib 依赖项,[安装 Nginx 编译所需要的依赖项](#安装 Nginx 编译所需要的依赖项)

./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib=<path> option.

# 查找 Nginx 的安装位置

默认情况下,会安装到 /usr/local/nginx 下,也可以通过命令查找安装位置:

whereis nginx

# 启动 Nginx

执行以下命令:

/usr/local/nginx/sbin/nginx

如果出现以下错误,说明 80 端口被占用了,或者 Nginx 已经启动过了:

[root@localhost ~]# /usr/local/nginx/sbin/nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()

停止 Nginx,并重新启动:

/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx

如果依然无法正常启动,使用以下命令找到占用 80 端口的进程然后 kill 掉。

netstat -anop | grep -w 80

如果出现 -bash: netstat: 未找到命令,则需要先执行以下命令安装 net-tools 依赖

yum -y install net-tools

# 访问 Nginx

# 从服务器里访问 Nginx

在服务器中执行以下命令:

curl 127.0.0.1:80

如果看到以下提示,说明 Nginx 服务已经启动起来,并且可以正常使用了。

[root@localhost ~]# curl 127.0.0.1:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
# 从外网访问 Nginx

在主机用浏览器打开以下网址,把 192.168.202.221 换成对应的 IP 地址。

http://192.168.202.221:80

如果无法访问,检查服务器是否开启了防火墙。

systemctl status firewalld

看到绿色的小圆点或者看到提示 Active: active (running),说明防火墙正在开启,执行以下命令关闭防火墙,并永久生效

systemctl stop firewalld
systemctl disable firewalld

注意!!!直接关闭防火墙非常不安全,建议只开放需要的 80 端口。

执行以下命令开放 80 端口(执行后出现 success 说明执行成功)。

添加完成后,还需要重新加载防火墙才能成功,否则只有在下次重新启动防火墙的时候才会生效!

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

# 隐藏 Nginx 版本号

sed -i '/http {/a\    server_tokens off;' /usr/local/nginx/conf/nginx.conf
# 修改完配置后需要重启才能生效
/usr/local/nginx/sbin/nginx -s reload

# 添加 Nginx 至环境变量(可选)

把 Nginx 添加到环境变量后可以在系统的任意路径下执行 nginx 的命令。

# 方式一(推荐):使用 echo 命令追加到 /etc/profile
echo 'export NGINX_HOME=/usr/local/nginx' >> /etc/profile
echo 'export PATH=$NGINX_HOME/sbin:$PATH' >> /etc/profile

执行以下命令,使环境变量生效

source /etc/profile
# 方式二:手动修改 /etc/profile
vi /etc/profile
# 输入大写的 G 或者按 Shift + g 跳到最后一行
# 在最后添加以下内容
export NGINX_HOME=/usr/local/nginx
export PATH=$NGINX_HOME/sbin:$PATH
# 修改完成后,输入 :wq 保存并退出

执行以下命令,使环境变量生效。

source /etc/profile

执行完成以后,就可以在任意目录下直接使用 Nginx 命令了。

cd ~
nginx

# 设置 Nginx 开机自动启动(可选)

# 方式一:使用 rc.local 设置 Nginx 开机自启

默认情况下,Nginx 的安装目录是 /usr/local/nginx,否则需要替换成 Nginx 二进制文件具体所在的路径。

echo '/usr/local/nginx/sbin/nginx' >> /etc/rc.local

设置执行权限,确保脚本会在开机的时候会执行。

chmod +x /etc/rc.d/rc.local
# 方式二:(CentOS 7 官方推荐的方式)使用 systemd 设置 Nginx 开机自启

注意!!!从 CentOS 7 开始,才有 systemd 这个服务,这个服务的出现是为了解决以前 sysinit 的一些缺点。

但是我个人觉得,如果只是想达到开机自动启动的目的,使用 rc.local 反而更加方便。


创建 nginx.service

vi /lib/systemd/system/nginx.service

添加以下内容:

[Unit]
Description=nginx
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

然后 :wq 保存并退出。

这个时候,就可以用 systemctl 来直接管理 nginx 了。

设置 Nginx 开机自启:

systemctl enable nginx.service

用 systemctl 管理 Nginx 服务的其他命令:

# 启动 Nginx 服务
systemctl start nginx.service
# 重新启动 Nginx 服务
systemctl restart nginx.service
# 停止 Nginx 服务
systemctl stop nginx.service
# 重新加载 Nginx 的配置文件,类似于重启,但服务不会停止
systemctl reload nginx.service
# 设置开机自启动
systemctl enable nginx.service
# 停止开机自启动
systemctl disable nginx.service
# 查看服务当前状态
systemctl status nginx.service
# 查看所有已启动的服务
systemctl list-units --type=service

# 添加使用 gzip 压缩

cd sbin/
./nginx -s reload
./nginx -V
./configure --with-http_gzip_static_module
./nginx -s reload

# Nginx 安装方式二:通过 yum 安装

这种方式安装方便,管理也很方便(可以通过 systemctl 直接管理),适合新手。

但是,这种方式安装的文件目录不集中,分散到系统的多个目录中。而且 yum 上的版本可能不是最新的,并且也不好指定某个版本去下载。

# 添加 Nginx 的 yum 源

sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

# 安装 Nginx

sudo yum install -y nginx

# 启动 Nginx

sudo systemctl start nginx.service

# 开机自动启动 Nginx

sudo systemctl enable nginx.service

# 通过 yum 安装的 nginx 的配置存放目录

  • 网站文件存放默认目录:/usr/share/nginx/html

  • 网站默认站点配置:/etc/nginx/conf.d/default.conf

  • 自定义Nginx站点配置文件存放目录:/etc/nginx/conf.d/

  • Nginx全局配置:/etc/nginx/nginx.conf

  • Nginx启动:nginx -c nginx.conf

# 访问 Nginx

参考方式一:[访问 Nginx](#访问 Nginx)

参考资料:

Linux安装Nginx步骤 (opens new window)

What's the difference between the "mainline" and "stable" branches of nginx? (opens new window)

centOS7安装nginx及nginx配置 (opens new window)

使用grep精确匹配一个单词 (opens new window)

CentOS 7 yum 安装 Nginx (opens new window)

Centos7设置nginx开机自动启动 (opens new window)

centos 7下的nginx设置开机自动启动 (opens new window)