在Linux中安装Nginx Web 服务器
Nginx提供了几种用于不同版本Linux的安装软件包。可以使用软件包管理器直接安装Nginx,如下所示。
$ sudo apt install nginx # Ubuntu
$ sudo dnf install nginx # Fedora
$ sudo yum install epel-release && yum install nginx # RHEL 或 CentOS
也可以从源代码编译Nginx。
1、启动Nginx服务器
如下所示,启动Nginx Web服务器非常容易。只需使用以下命令之一来调用标准Web服务器。
sudo service nginx start
发出此命令时,Nginx正在由System V初始化脚本启动。如果您是从基于系统的系统(如Ubuntu Linux 16.04LTS及更高版本)运行Nginx,则需要使用以下命令。
sudo systemctl start nginx
您应该得到一个响应,显示服务器是否成功启动。另一个简单但有效的方法是使用二进制路径直接调用Nginx,如下所示。
sudo /usr/bin/nginx
2、停止Nginx服务器
您也可以使用上面显示的类似方法停止正在运行的Nginx服务器。但是,请记住,当停止正在运行的Nginx服务器时,与之关联的所有系统进程都会被杀死。即使您有活动的连接,它也会终止。
sudo service nginx stop
该命令将在使用System V初始化脚本的系统中停止Nginx进程。对于基于systemd的计算机,可以使用以下命令。
sudo systemctl stop nginx
但是,在繁忙的服务器中,这些命令仍会花费大量时间。下一条命令演示如何以更快的方式停止Nginx服务。
sudo killall -9 nginx
3、退出Nginx服务器
退出Nginx服务器类似于停止服务器-唯一的区别是。Nginx守护程序采用了一种优雅的方法来退出,因为它不会中断任何活动的连接。因此,您的客户请求将在关闭之前按预期的方式提供。
sudo service nginx quit
使用此命令从Linux shell退出Nginx服务器。运行基于Systemd的计算机的用户可以利用下一个命令来完成此工作。
sudo systemctl quit nginx
您也可以使用以下Nginx命令之一退出正在运行的服务器。
sudo nginx -s quit
sudo kill -QUIT $( cat /usr/local/nginx/logs/nginx.pid )
4、重新启动Nginx服务器
重新启动服务器时,Nginx进程只是停止然后重新启动。您可以使用以下命令之一从命令行重新启动Nginx守护程序。
sudo service nginx restart
此命令将使用System V初始化脚本重新启动Nginx服务器。您可以在新的Ubuntu版本(例如较新的Ubuntu)等基于系统的系统中使用systemctl进行此操作。
sudo systemctl restart nginx
您也可以用其他方式执行此操作,如以下示例所示。
sudo /etc/init.d/nginx restart
如果从源代码编译了Nginx,则可以使用下一个命令。
sudo /usr/local/nginx/sbin/nginx -s restart
5.重新加载Nginx服务器
重新加载Nginx服务器与重新启动服务器略有不同。重新加载服务器时,Nginx将以正常方式关闭。这意味着Nginx守护程序将首先终止,然后解析配置文件以进行尝试的更改,并在不中断操作的情况下启动新的工作进程。
sudo service nginx reload
sudo systemctl status nginx
第一个命令使用System V初始化脚本,而最后一个命令用于基于systemd的Linux发行版。您也可以调用以下脚本来完成此工作。
sudo /etc/init.d/nginx reload
如果您已从源代码编译了Nginx,则应使用下一个命令。
sudo /usr/local/nginx/sbin/nginx -s reload
下一个命令是正常重启Nginx服务器的另一种便捷方法。
sudo nginx -s reload
6、检查Nginx状态
有时,您可能需要先查看Nginx服务器的当前状态,然后再对其进行任何操作。使用以下命令之一可以非常快速地完成此操作。切记对您的命令进行sudo或切换到root用户。
sudo service nginx status
如先前的一些命令所示,此命令通过初始化System V初始化脚本来起作用。您可以对使用systemd的系统使用next命令。
systemctl status nginx
执行此操作的另一种方法是直接使用Nginx init.d脚本,如以下命令所示。
sudo /etc/init.d/nginx status
如果Nginx是从源代码编译的,则您需要执行下一个命令。
sudo /usr/local/nginx/sbin/nginx -s status
7、检查Nginx配置
由于Nginx的自定义功能范围很广,因此网络管理员经常需要调整配置文件以添加/解锁新功能。但是,您应该始终测试配置文件中是否存在潜在错误。否则,恶意用户可能会利用服务器配置中的错误。
sudo nginx -t
这是一个简单的命令,可以为您完成这项工作。运行此命令时,基本上是在告诉Nginx检查配置文件中的语法错误,并避免运行服务器。您可以使用以下命令在终端控制台上转储配置测试的结果。
sudo nginx -T
您也可以使用以下Nginx命令之一来测试Nginx服务器的配置。
sudo service nginx configtest # System V Init
sudo systemctl config nginx # systemd-based
8、送信号给Nginx
管理员可以向Nginx守护程序发送各种有用的信号。您将需要使用-s标志向Nginx发送信号,然后发送实际信号。当我们使用它退出并重新加载Nginx服务器时,我们已经看到了运行中的信号。在这里,我们按顺序指定它们。
$ sudo nginx -s stop # 停止正在运行的Nginx服务器
$ sudo nginx -s quit # 退出Nginx服务器
$ sudo nginx -s reload # 正常重启Nginx
$ sudo nginx -s reopen # 重新打开服务器日志文件
但是,您的Nginx版本至少应为0.7.53或更高。否则,您将无法向Nginx进程发送信号。
9、显示Nginx版本信息
Nginx的某些较新功能仅适用于最新版本。因此,管理员可能会在旧版服务器上遇到一些兼容性问题。您可以轻松确定您的Nginx版本,以查看您的问题是否与服务器版本有关。
[linuxidc@localhost ~/www.linuxidc.com]$nginx -v
nginx version: nginx/1.14.1
以下命令可用于显示有关Nginx安装的其他信息,例如配置变量和编译器版本。
[linuxidc@localhost ~/www.linuxidc.com]$sudo service nginx -V
service ver. 1.1
sudo systemctl -V nginx
另外,如果您正在运行基于Ubuntu或Debian的Linux服务器,则可以使用以下命令查找您的Nginx版本。
sudo apt-cache policy nginx
10、显示帮助页面
Nginx帮助页面对于初学者和经验丰富的Linux管理员都是一个很好的参考点。您可以使用以下Nginx命令之一从Linux终端仿真器查看此参考。
sudo service nginx -h #System V Init使用
[linuxidc@localhost ~/www.linuxidc.com]$systemctl -h nginx #用于基于systemd的发行版
参考帮助页面始终是一个很好的选择,因为它们可以让您快速了解用户可用的选项。
11、使用替代配置
Nginx Web服务器提供了无止境的自定义功能列表。管理员可以轻松地调整Nginx配置文件,以向其服务器添加其他功能。大多数系统上的默认Nginx配置文件是/etc/nginx/nginx.conf。但是,通常最好先在其他配置文件上实现自定义。
sudo nginx -c ~/linuxidc.conf
请注意,我们假设您的新配置文件名为test.conf。用您的配置文件的实际名称替换这部分。现在,您可以使用以下命令测试新配置。
sudo nginx -t -c ~/linuxidc.conf
您也可以指示Nginx在从源代码进行编译时在其他目录中查找默认配置。在配置安装时只需传递此目录即可。
./configure --conf-path=/etc/some/other/nginx.conf
12、禁止显示非错误消息
测试新配置时,通常会收到错误消息。但是,在检查自定义项时,您还将获得很多不相关的信息。幸运的是,Nginx守护程序提供了一个简单的选项来抑制这些非错误消息,如下所示。
sudo nginx -q -t -c ~/linuxidc.conf
此命令将测试一个名为linuxidc.conf的自定义配置文件,并将忽略输出中不必要的信息。这对于远程服务器管理任务非常有用。
13、变更全局指令
全局指令包含Nginx服务器可用的所有配置参数。这是您的Web服务器最敏感的部分之一,需要认真注意。该-g选项允许管理员定义自己的Web服务器Nginx的个性化指令。
sudo nginx -g "pid /var/run/test.pid; worker_processes 2;"
该命令为PID指定全局Nginx指令,并定义工作进程数,在这种情况下为2。现在,我们可以使用先前使用的备用配置文件对此进行测试。
sudo nginx -t -c ~/test.conf -g "pid /var/run/test.pid; worker_processes 2;"
14、更改Nginx前缀路径
前缀路径包含Nginx Web服务器使用的所有文件。它也是用于配置设置相对路径(库源除外)的目录。默认情况下,Nginx使用/usr/local/nginx目录作为前缀。下面的命令演示了如何从命令行覆盖它。
sudo nginx -p /path/to/new/prefix
该-p标志允许我们通过新的前缀的位置。在测试新服务器时,它通常会派上用场。但是,此选项不适用于版本低于0.7.53的Nginx服务器。
15、检查stub_status模块
该stub_status模块公开有关Nginx的一些非常重要的指标。管理员经常使用它来监视其Linux邮件服务器或代理服务器。尽管所有预构建的Nginx二进制文件都随该模块一起提供,但是如果您从源代码编译了Nginx,则您的Nginx服务器可能没有此二进制文件。您可以使用以下命令测试是否已安装。
sudo nginx -V 2>&1 | grep --color -- --with-http_stub_status_module
如果发现缺少此模块,则始终可以从源代码重建Nginx。如下所示,在配置Nginx时只需包含–with-http_stub_status_module参数。
./configure --with-http_stub_status_module
16、检查Nginx路径
有几个Nginx命令可用于检查Nginx安装路径。就像日常的Linux终端命令一样,您始终可以使用which / whereis命令来检查Nginx路径。
[linuxidc@localhost ~/www.linuxidc.com]$which nginx
/usr/sbin/nginx
[linuxidc@localhost ~/www.linuxidc.com]$whereis nginx
nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man3/nginx.3pm.gz /usr/share/man/man8/nginx.8.gz
上面的命令将显示包含与Nginx设置相关的文件的所有系统位置。您可以通过使用ps命令并grepping所需信息来另一种方式。
[linuxidc@localhost ~/www.linuxidc.com]$ps aux | grep nginx
17、找到Nginx PID
PID或进程ID是唯一的数字,用于区分Linux和类Unix系统上的进程。我们可以使用适当的PID将各种信号发送到Nginx服务器。可以使用以下命令之一找到此PID。
[linuxidc@localhost ~/www.linuxidc.com]$ps aux | grep [n]ginx
root 3834 0.0 0.0 117740 2188 ? Ss 05:01 0:00 nginx: master process /usr/sbin/nginx
nginx 3835 0.0 0.2 148772 7704 ? S 05:01 0:00 nginx: worker process
[linuxidc@localhost ~/www.linuxidc.com]$pgrep nginx
3834
3835
[linuxidc@localhost ~/www.linuxidc.com]$cat /run/nginx.pid
3834
因此,我们可以将pgrep或vanilla grep命令与ps结合使用。如果您不了解“ grep”的工作原理,请不要担心。我们已经发布了有关Linux grep命令指南。《理解Linux中的pgrep命令 https://www.linuxidc.com/Linux/2020-02/162409.htm》
18、查找日志文件
日志文件包含许多对系统管理员和开发人员而言有价值的信息。Nginx有两个默认的日志文件,由access.log和error.log文档组成。这些位于/var/log,可以使用以下命令查看。
[root@localhost /home/linuxidc/www.linuxidc.com]$ls /var/log/nginx/*.log
/var/log/nginx/access.log /var/log/nginx/error.log
现在您应该看到上面提到的那些日志文件。顾名思义,access.log包含有关您的网站访问者的信息,而error.log包含有关错误配置的警告/详细信息。但是,您需要先从Nginx配置文件中启用这两个日志,然后才能使用它们。
19、设置虚拟主机
虚拟主机允许服务器管理员在一台服务器计算机上运行多个网站。这通常很有用,因为您可以共享您的计算过程以同时运行多个站点。但是,术语虚拟主机通常与Apache服务器关联。在Nginx世界中,它们被称为“ 服务器块 ”。
[linuxidc@localhost ~/www.linuxidc.com]$ sudo ln -s /etc/nginx/sites-available/linuxidc.com /etc/nginx/sites-enabled/linuxidc.com
您可以使用此简单的符号链接轻松地在Nginx服务器上启用虚拟主机。如果要禁用虚拟主机,只需删除符号链接。
20、查看编译的Nginx模块
正如您在以前的Nginx命令中看到的那样,在安装守护程序时,还会安装一些基本模块。我们可以使用以下命令轻松查看这些Nginx模块。
[linuxidc@localhost ~/www.linuxidc.com]$sudo 2>&1 nginx -V | tr -- - '\n' | grep _module
该命令利用了几个Linux命令行工具,并过滤掉了不相关的信息以仅显示模块。由于Nginx有很多模块,因此该命令对于检查为服务器编译了哪些模块很有用。
21、启用/禁用Nginx服务
启用Nginx服务可以使服务器在启动期间自动启动。这对于专用服务器至关重要,因为否则,用户请求可能会中断。我们可以使用以下命令轻松地使Nginx自动启动。
[linuxidc@localhost ~/www.linuxidc.com]$sudo service nginx enable# System V Init
[linuxidc@localhost ~/www.linuxidc.com]$sudo systemctl enable nginx # 基于systemd系统
这些简单但有效的命令将确保尽可能减少服务器停机时间。您也可以根据需要禁用自动启动。只需使用以下命令之一。
[linuxidc@localhost ~/www.linuxidc.com]$sudo update-rc.d -f nginx disable
[linuxidc@localhost ~/www.linuxidc.com]$sudo systemctl disable nginx
22、即时升级Nginx
Nginx允许管理员即时升级二进制文件和/或配置文件。这意味着您的客户端请求不会由于服务器升级而中断。为此,首先,我们需要找到主Nginx进程的PID。我们可以使用已经演示过的简单命令来实现。
[linuxidc@localhost ~/www.linuxidc.com]$cat /run/nginx.pid
新的Nginx二进制文件应该已经准备就绪。通过以下命令生成一组新的Nginx主/工作进程,这些进程使用新的二进制文件。
[linuxidc@localhost ~/www.linuxidc.com]$sudo kill -s USR2 `cat /run/nginx.pid`
现在,使用以下命令杀死第一个主进程使用的辅助进程。
[linuxidc@localhost ~/www.linuxidc.com]$sudo kill -s WINCH `cat /run/nginx.pid.oldbin`
通过杀死旧的主进程来跟踪它。
[linuxidc@localhost ~/www.linuxidc.com]$sudo kill -s QUIT `cat /run/nginx.pid.oldbin`
23、在Chroot Jail中设置Nginx
Nginx服务器的Chroot Jail将在可能发生入侵的情况下提供额外的安全保护。管理员经常使用这种技术来确保其服务器在Linux文件系统的一小部分中是隔离的和安全的。使用以下命令在Chroot Jail中设置Nginx服务器。
# D=/nginx
# mkdir -p $D
# mkdir -p $D/etc
# mkdir -p $D/dev
# mkdir -p $D/var
# mkdir -p $D/usr
# mkdir -p $D/usr/local/nginx
# mkdir -p $D/tmp
# chmod 1777 $D/tmp
# mkdir -p $D/var/tmp
# chmod 1777 $D/var/tmp
# mkdir -p $D/lib64
# ls -l /dev/{null,random,urandom}
# /bin/cp -farv /usr/local/nginx/* $D/usr/local/nginx
您需要以超级用户身份运行它们。现在,使用以下命令找出共享库。
# ldd /usr/local/nginx/sbin/nginx
如下所示,一一复制所有库。
# cp /lib64/libpcre.so.0 $D/lib64
您还需要复制/ etc和其他一些目录。
# cp -fv /etc/{group,prelink.cache,services,adjtime,shells,gshadow,shadow,hosts.deny,localtime,nsswitch.conf,nscd.conf,prelink.conf,protocols,hosts,passwd,ld.so.cache,ld.so.conf,resolv.conf,host.conf} $D/etc
# cp -avr /etc/{ld.so.conf.d,prelink.conf.d} $D/etc
您的Chroot Jail现在已准备好接受Nginx。只需杀死旧服务,然后使用下一条命令启动新服务即可。
# /usr/sbin/chroot /nginx /usr/local/nginx/sbin/nginx -t
24、在Docker中运行Nginx
Docker容器由于其灵活性和强大的性能而变得非常流行。您可以从Docker容器中轻松创建和运行Nginx Web服务器。下一条命令将提取官方Nginx映像,并使用默认配置创建服务器实例。
[root@localhost /home/linuxidc/www.linuxidc.com]$docker run --name nginx-server -P -d nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
123275d6e508: Pull complete
6cd6a943ce27: Pull complete
a50b5ac4a7fb: Pull complete
Digest: sha256:d81f010955749350ef31a119fb94b180fde8b2f157da351ff5667ae037968b28
Status: Downloaded newer image for nginx:latest
b235541342e380c9e57aad547d52292da89e2c26d9cf6a1548d568a4073136ed
您可以使用以下简单命令维护持久性存储。
sudo docker run --name nginx-server -v /var/www:/usr/share/nginx/html:ro \
-v /var/nginx/conf:/etc/nginx:ro -P -d nginx
25、在LXD内运行Nginx
LXD被誉为下一代Linux容器,并提供了一系列惊人的功能。您还可以通过LXD容器使用Nginx。看一下以下用于LXD的Nginx命令。
$ sudo lxc launch Ubuntu:18.04 nginx-server
$ sudo lxc exec nginx-server -- sudo --user ubuntu --login
$ sudo apt update
$ sudo apt install -y nginx
$ sudo systemctl reload nginx
首先,我们创建了一个名为nginx-server的容器,然后在该容器中启动了一个shell。然后,我们更新了软件包列表,并在该容器中安装了Nginx Web服务器。最后一条命令只是重新加载服务器。
转自:https://www.linuxidc.com/search.aspx?where=nkey&keyword=65544