如何在 CentOS 8 上安装和使用 Nginx
Nginx [engine X] 是一款免费的开源高性能 Web 服务器。它还可用作反向代理服务器和负载均衡器。本页介绍如何在 CentOS 8 上安装 Nginx 并使用 CLI 配置静态网站。
教程要求 | |
---|---|
要求 | CentOS 8 Linux |
Root 权限 | 是的 |
难度等级 | 简单的 |
预计阅读时间 | 6 分钟 |
如何在 CentOS 8 上安装 Nginx
在 CentOS Linux 8 上安装 Nginx Web 服务器的步骤如下:
- 使用 ssh 命令登录到您的云服务器或裸机服务器:
ssh user@cloud-server-ip - 搜索 Nginx 包:
sudo yum search nginx - 在 CentOS 8 上使用yum 命令安装 nginx 包:
sudo yum update
sudo yum install nginx - 更新防火墙设置并打开 TCP 端口 80 和 443。运行:
sudo firewall-cmd --permanent --zone=public --add-service=https --add-service=http
sudo firewall-cmd --reload
让我们详细了解所有命令和示例。
步骤 1 – 更新系统
维护系统、内核并更新所有已安装的软件包以确保安全是系统管理员的一项重要任务。因此,更新系统,运行:
$ sudo yum updateinfo
$ sudo yum update
## Reboot the system if a new kernel update was installed ##
$ sudo reboot
第 2 步 - 搜索 Nginx 包
我的 Linux 发行版中是否有 Web 服务器?让我们来一探究竟:示例输出:
$ sudo yum search nginx
$ sudo yum list nginx
Last metadata expiration check: 1:09:02 ago on Sun Nov 24 17:24:15 2019. ============================== Name Exactly Matched: nginx ============================== nginx.x86_64 : A high performance web server and reverse proxy server ============================= Name & Summary Matched: nginx ============================= nginx-mod-mail.x86_64 : Nginx mail modules nginx-mod-stream.x86_64 : Nginx stream modules collectd-nginx.x86_64 : Nginx plugin for collectd nginx-mod-http-perl.x86_64 : Nginx HTTP perl module nginx-mod-http-xslt-filter.x86_64 : Nginx XSLT module nginx-mod-http-image-filter.x86_64 : Nginx HTTP image filter module nginx-filesystem.noarch : The basic directory layout for the Nginx server pcp-pmda-nginx.x86_64 : Performance Co-Pilot (PCP) metrics for the Nginx Webserver nginx-all-modules.noarch : A meta package that installs all available Nginx modules
我要安装哪个版本的 Nginx?获取要安装的 Nginx 版本信息,执行:
$ sudo yum info nginx
示例输出:
Last metadata expiration check: 0:16:18 ago on Mon Jun 8 10:07:04 2020. Available Packages Name : nginx Epoch : 1 Version : 1.14.1 Release : 9.module_el8.0.0+184+e34fea82 Architecture : x86_64 Size : 570 k Source : nginx-1.14.1-9.module_el8.0.0+184+e34fea82.src.rpm Repository : AppStream Summary : A high performance web server and reverse proxy server URL : http://nginx.org/ License : BSD Description : Nginx is a web server and a reverse proxy server for HTTP, SMTP, : POP3 and IMAP protocols, with a strong focus on high : concurrency, performance and low memory usage.
我们可以使用以下 dnf 命令列出所有 Nginx 模块流、它们的配置文件和状态:
$ sudo yum module list nginx
默认版本是 1.14,但我们也可以安装版本 1.16。内容如下:
Last metadata expiration check: 0:18:57 ago on Mon Jun 8 10:07:04 2020. CentOS-8 - AppStream Name Stream Profiles Summary nginx 1.14 [d] common [d] nginx webserver nginx 1.16 common nginx webserver Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
想要尝试 1.16 版本吗?请尝试以下命令:
$ sudo yum module reset nginx
$ sudo yum module enable nginx:1.16
## verify it version set to 1.16 ##
$ sudo yum module list nginx
在 CentOS 8 上启用并安装 Nginx 1.16 版本
第 3 步 - 在 CentOS 8 上安装 Nginx
要安装最新的稳定 nginx 服务器,请运行以下yum 命令:
$ sudo yum install nginx
步骤 4 - 启用 nginx 服务器
首先,通过运行 systemctl 命令启用 nginx 服务,以便它在服务器启动时启动:
$ sudo systemctl enable nginx
示例输出:
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service ? /usr/lib/systemd/system/nginx.service.
启动服务,运行:
$ sudo systemctl start nginx
启动/停止/重启 nginx 服务器的命令
根据您的需要运行命令。
$ sudo systemctl start nginx ## <-- start the server ##
$ sudo systemctl stop nginx ## <-- stop the server ##
$ sudo systemctl restart nginx ## <-- restart the server ##
$ sudo systemctl reload nginx ## <-- reload the server ##
$ sudo systemctl status nginx ## <-- get status of the server ##
步骤 5 – 使用firewall-cmd 打开端口 80 和 443
您必须使用firewall-cmd 命令打开并启用端口 80 和 443 :
$ sudo firewall-cmd --permanent --zone=public --add-service=http --add-service=https
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-services --zone=public
防火墙配置打开http/https端口
请参阅“如何在 CentOS 8 上使用 FirewallD 设置防火墙”了解更多信息
第 6 步 - 测试
使用 ss 命令验证 TCP 端口 80 或 443 是否打开:
$ sudo ss -tulpn
示例输出(查找 :80 和 :443 行):
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 10.147.164.2%eth0:68 0.0.0.0:* users:(("NetworkManager",pid=50,fd=15)) tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1316,fd=6),("nginx",pid=1315,fd=6),("nginx",pid=1314,fd=6)) tcp LISTEN 0 128 [::]:80 [::]:* users:(("nginx",pid=1316,fd=7),("nginx",pid=1315,fd=7),("nginx",pid=1314,fd=7)) tcp LISTEN 0 128 [::]:443 [::]:* users:(("nginx",pid=1316,fd=7),("nginx",pid=1315,fd=7),("nginx",pid=1314,fd=7))
如果您不知道服务器的 IP 地址,请运行以下ip 命令:
$ ip a
示例输出:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 00:16:3e:6b:8d:f7 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 10.147.164.2/24 brd 10.147.164.255 scope global dynamic noprefixroute eth0 valid_lft 3067sec preferred_lft 3067sec inet6 fe80::216:3eff:fe6b:8df7/64 scope link valid_lft forever preferred_lft forever
例如我的 IP 地址显示为10.147.164.2。打开 Web 浏览器并输入 URL(域名)/IP 地址:
http://10.147.164.2
在 CentOS Enterprise Linux 8 服务器上运行的 Nginx
还可以使用 curl 命令通过 cli 获取相同的信息:
$ curl -I http://10.147.164.2
$ curl http://10.147.164.2
步骤 7 - 配置 Nginx 服务器
现在您知道如何在 CentOS 8 服务器上安装 Nginx。现在是时候了解配置选项了:
- 配置目录 –/etc/nginx/
- Maibn 全局配置文件 –/etc/nginx/nginx.conf
- Nginx 打开的 TCP 端口 - 80(HTTP)、443(HTTPS)
- 默认 Web 文档根目录 –/usr/share/nginx/html
- 访问日志文件 –/var/log/nginx/access.log
- 错误日志文件 –/var/log/nginx/error.log
要编辑文件,请使用文本编辑器(例如 vi 命令/nano 命令):
$ sudo vi /etc/nginx/nginx.conf
示例输出:
# For more information on configuration, see: user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } }
请参阅此处的Nginx 服务器文档。
您可以将 html/css/js 和图像上传或复制到 /usr/share/nginx/html/,
使用 rsync 命令或 scp 命令/sftp 命令从本地桌面复制到远程服务器:
$ cd /usr/share/nginx/html/
$ sudo cp /backups/example.com/*.html .
$ sudo cp /backups/example.com/*.css .
$ rsync ~/projects/static/www.example.com/prod/* your-username@10.147.164.2:/usr/share/nginx/html/
步骤 8 - 设置虚拟域/主机
让我们通过输入以下 useradd 命令为我们的虚拟主机创建一个新用户:
其中,
$ sudo useradd -d /home/example.com -m -k /dev/null -s /usr/sbin/nologin cbz-www
- -d /home/example.com:用于存储名为 example.com 的虚拟域名的所有文件的主目录
- -m:新建一个目录,用于存放文件。
- -k /dev/null:不要在目录中创建任何点文件。
- -s /usr/sbin/nologin:不允许 cbz-www 用户登录服务器。这是一项安全功能。
- cbz-www:我的虚拟域名的用户名称为 example.com
锁定 Linux 用户帐户,输入:接下来使用mkdir 命令
创建 html 目录:
最后,使用文本编辑器(例如 vim 命令/nano 命令)创建如下示例 html 页面以供测试:
$ sudo passwd -l cbz-www
$ sudo mkdir -pv /home/example.com/html
mkdir: created directory '/home/example.com/html'
$ sudo vim /home/example.com/html/index.html
<html> <head> <title>www.example.com - welcome to my sweet home page</title> </head> <body> <h2>www.example.com - virtual domain</h2> <p>This is a test page running on:</p> <ul> <li>CentOS Linux 8.0</li> <li>Nginx web server</li> </ul> <hr> <small>Send all feedback and errors to me @ webmaster@example.com</small> </body> </html>
使用 chown 命令/chmod 命令设置权限,并使用 chcon 命令更正 SELinux 权限:
使用正确的配置选项创建虚拟域/主机块文件:
附加以下指令:
$ sudo chmod -R 0555 /home/example.com/
$ sudo chown -R cbz-www:cbz-www /home/example.com/
changed ownership of '/home/example.com/html/index.html' from root:root to cbz-www:cbz-www
changed ownership of '/home/example.com/html' from root:root to cbz-www:cbz-www
ownership of '/home/example.com/' retained as cbz-www:cbz-www
## avoid errors when SELinux enabled and root is outside /usr/local/share/www OR /var/www ##
$ sudo chcon -vR system_u:object_r:httpd_sys_content_t:s0 /home/example.com/
$ sudo vim /etc/nginx/conf.d/example.com.conf
server { ## Listen to TCP port 80 ## listen 80; listen [::]:80; ## Set document web root to directory ## root /home/example.com/html; index index.html; ## Set virtual domain/host name here ## server_name example.com www.example.com; ## Set default access and error log file ## access_log /var/log/nginx/example.com_access.log main; error_log /var/log/nginx/example.com_error.log; ## Set default error ## location / { try_files $uri $uri/ =404; } }
检查 Nginx 是否存在语法错误:
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
如果没有错误,则表示重新加载 Nginx 服务器:
启动 Web 浏览器并输入虚拟域 URL。例如:
$ sudo nginx -s reload
## or ##
$ sudo systemcl reload nginx
http://your-domain-name-here
http://www.example.com
步骤 9 – 查看日志文件
使用 tail 命令/ cat 命令或grep 命令/ egrep 命令如下:
示例会话
$ sudo cat /var/log/nginx/example.com_access.log
$ sudo grep 'GET /foo' /var/log/nginx/example.com_access.log
$ sudo tail -f /var/log/nginx/example.com_error.log
10.147.164.2 - - [08/Jun/2020:12:12:37 +0000] "HEAD /index.html HTTP/1.1" 404 0 "-" "curl/7.61.1" "-" 10.147.164.2 - - [08/Jun/2020:12:13:12 +0000] "HEAD /index.html HTTP/1.1" 200 0 "-" "curl/7.61.1" "-" 10.147.164.2 - - [08/Jun/2020:12:13:14 +0000] "HEAD /index.html HTTP/1.1" 200 0 "-" "curl/7.61.1" "-" 10.147.164.2 - - [08/Jun/2020:12:13:19 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.61.1" "-" 10.147.164.2 - - [08/Jun/2020:12:15:21 +0000] "GET /index.html HTTP/1.1" 200 348 "-" "curl/7.61.1" "-" 10.147.164.1 - - [08/Jun/2020:12:15:49 +0000] "HEAD /index.html HTTP/1.1" 200 0 "-" "curl/7.68.0" "-" 139.151.zzz.yyy - - [08/Jun/2020:12:28:04 +0000] "GET / HTTP/1.1" 200 348 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) snap Chromium/83.0.4103.61 Chrome/83.0.4103.61 Safari/537.36" "-" 139.151.zzz.yyy- - [08/Jun/2020:12:28:04 +0000] "GET /favicon.ico HTTP/1.1" 404 571 "http://52.44.236.32/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) snap Chromium/83.0.4103.61 Chrome/83.0.4103.61 Safari/537.36" "-"
如何保护 Nginx 服务器
请参阅“ 25 个 Nginx Web 服务器最佳安全实践”和“ 40 个 Linux 服务器安全提示”了解更多信息。
结论
您刚刚学习了如何在 CentOS Enterprise Linux 8 服务器上安装、设置和配置 Nginx 服务器。我们进一步解释了如何打开 TCP 端口和配置虚拟主机。接下来,您可以安装 PHP/MySQL 或 Python/Perl 来运行您的 webapps。有关更多信息,请参阅此处的 nginx 文档。
- CentOS 8 上的 Nginx
- CentOS 8 上适用于 Nginx 的 PHP 7.x
- 在 CentOS 8 上为 Nginx 设置 Let's Encrypt