Ubuntu 中安装和配置 Nginx
原文:如何在 Ubuntu 20.04 中安装和配置 Nginx - 卡拉云 (kalacloud.com)
前言
Nginx 是全球使用最广泛的 web servers 之一。它甚至负责托管互联网上一些超级大流量的网站也不在话下。很多情况下,它比 Apache 占用更少资源,并且可以使用它作为 Web 服务器或反向代理来使用。
在本教程中,我们要学习如何在 Ubuntu 20.04 中安装和配置 Nginx。
准备工作
要根据本教程学习,首先我们要有一台安装好 Ubuntu 20.04 的服务器:
- 有 sudo 的 root 用户权限,大家可根据《Ubuntu 120.04初始服务器设置》(撰写中,稍后上线)指南来配置自己的服务器。
第 1 步:安装 Nginx
由于 Nginx 可以从 ubuntu 软件源中获得,因此我们可以使用 apt 来安装 Nginx。
我们可以使用以下命令安装 Nginx 到 Ubuntu 中。
sudo apt update
sudo apt install nginx
选择 Y 来开始安装,apt 会帮你把 Nginx 和它所必备的依赖安装到我们的服务器中。
第 2 步:调整防火墙
在测试 Nginx 之前,我们需要调整防火墙,让他允许 Nginx 服务通过。Nginx ufw
在安装时会把他自身注册成为服务。
sudo ufw app list
输出结果:
kalacloud@chuan-server:~$ sudo ufw app list
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
你可以看到 Nginx 提供了三个配置文件:
-
Nginx Full
开端口80 正常,未加密的网络流量
端口443 TLS / SSL加密的流量
-
Nginx HTTP
仅打开端口80 正常,未加密
-
Nginx HTTPS
仅打开端口443 TLS / SSL加密
我们使用 Nginx HTTP 来做本教程演示。
sudo ufw allow 'Nginx HTTP'
我们用以下命令来查看更改结果
sudo ufw status
我们可以在输出结果中看到
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
第3步:检查我们的 Web 服务器
在安装结束后,Ubuntu 会启动 Nginx 。 Web 服务器应该已经在运行了。
我们可以通过 systemd
来检查 init 系统状态,确保它正在运行:
systemctl status nginx
kalacloud@chuan-server:~$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset:>
Active: active (running) since Wed 2020-07-29 07:21:53 UTC; 23min ago
Docs: man:nginx(8)
Main PID: 3340 (nginx)
Tasks: 2 (limit: 2248)
Memory: 4.3M
CGroup: /system.slice/nginx.service
├─3340 nginx: master process /usr/sbin/nginx -g daemon on; master_>
└─3341 nginx: worker process
Jul 29 07:21:52 chuan-server systemd[1]: Starting A high performance web server>
Jul 29 07:21:53 chuan-server systemd[1]: Started A high performance web server >
lines 1-13/13 (END)
如上所示,这个服务已经成功启动。接下来我们要直接来测试 Nginx 是否可以通过浏览器访问。
首先我们执行以下命令:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
这可以让我们在浏览器中查看他们是否正常工作。
接着我们要找到服务器在公网上的ip,我们可以使用这个命令
curl -4 icanhazip.com
获得服务器ip后,我们可以在浏览器输入这个 ip 。当然除了公网,我们也可以输入主机的内网 ip 通过局域网来访问。
http://your_server_ip
打开浏览器输入ip 就能看到 Nginx 的默认页面。这也说明服务器运行起来了。
这里推荐一下可与 Nginx 搭配使用的卡拉云。卡拉云是一套低代码开发工具,可接入常见的数据库(MySQL、MongoDB等)及 RESTful API, 你无需懂会任何前端技术,只要会写 SQL,就可以快速搭建属于你自己的数据库管理工具。>> 深入了解卡拉云 <<
第 4 步:管理 Nginx
现在,您已启动并运行了Web服务器,让我们回顾一些基本的管理命令。
上一步,我们已经启动起来 Web 服务器了。接下来,让我们来学习一下 Nginx 的基本命令。
要停止Web服务器,输入:
sudo systemctl stop nginx
要在停止时,启动Web服务器,键入:
sudo systemctl start nginx
要停止,然后再次启动该服务,键入:
sudo systemctl restart nginx
如果我们只是修改配置,Nginx 可以在不终端的情况下热加载。我们可以键入:
sudo systemctl reload nginx
默认情况下,Nginx 会在服务器启动时,跟随系统启动,如果我们不想这样,我们可以用这个命令来禁止:
sudo systemctl disable nginx
要重新让系统启动时引导 Nginx 启动,那么我们可以输入:
sudo systemctl enable nginx
- nginx重启报错:nginx: [error] invalid PID number "" in "/run/nginx.pid"
- 问题描述:执行 nginx -t 是OK的,然而在执行 nginx -s reload 的时候报错
nginx: [error] invalid PID number “” in “/run/nginx.pid”
- 解决办法
需要先执行
nginx -c /etc/nginx/nginx.conf
nginx.conf文件的路径可以从nginx -t的返回中找到。
nginx -s reload
第5步:设置服务器块(Server block)
使用Nginx Web服务器时,服务器块(类似于Apache中的虚拟主机)可用于封装配置详细信息,并在一台服务器中托管多个域。我们将建立一个名为 example.com 的域,但我们可以用自己的域名替换它。
在 Ubuntu 上的 Nginx 默认情况下启用了一个服务器块(server block),服务器块的配置是为给服务器的目录提供地址 /var/www/html
。尽管这对于单个站点非常有效,但是如果我们在服务器上托管多个站点,则可能变很臃肿。让我们给/var/www/html
目录添加上分站点目录。
比如我们的网站是 example.com ,那我们创建一个对应的目录 example.com 目录:
sudo mkdir -p /var/www/example.com/html
接下来,使用$USER
环境变量分配目录的所有权:
sudo chown -R $USER:$USER /var/www/example.com/html
如果我们没有修改自己的umask
值,那么 Web 根目录的权限应该正确,我们可以通过输入以下命令来确认:
sudo chmod -R 755 /var/www/example.com
接下来,让我们来编辑index.html
可以使用 nano 编辑器或其他你用这顺手的编辑器:
nano /var/www/example.com/html/index.html
在其中,添加以下示例HTML:
/var/www/example.com/html/index.html
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success! The example.com server block is working!</h1>
</body>
</html>
完成后保存并关闭文件。
接下来我们为 Nginx 来创建一个服务器块。与直接修改默认配置文件不同,我们在以下位置创建一个新文件:/etc/nginx/sites-available/example.com
sudo nano /etc/nginx/sites-available/example.com
粘贴到以下内容添加到文件中,这个块的配置与默认块的配置相似,但针对我们的新目录和域名进行了更新:
/etc/nginx/sites-available/example.com
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
}
接下来,让我们通过在sites-enabled
目录新建一个链接,好让 Nginx 在启动过程中会读取这个目录:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
现在已启用并配置了两个服务器块,以及基于它们的listen
和server_name
指令响应请求:
example.com
: 将会响应example.com
和www.example.com
的请求default
: 将会响应 80 端口的请求,以及不能匹配到两个服务器块上的请求
为避免可能由于添加其他服务器名称而引起的哈希存储区内存问题,有必要调整/etc/nginx/nginx.conf
文件中的单个值。
打开文件:
sudo nano /etc/nginx/nginx.conf
找到server_names_hash_bucket_size
指令并删除#
符号:
...
http {
...
server_names_hash_bucket_size 64;
...
}
...
完成后保存并关闭文件。
接下来,测试以确保我们在 Nginx 文件中的改动,没有任何问题:
sudo nginx -t
如果没有任何问题,请重新启动 Nginx:
sudo systemctl restart nginx
Nginx 现在已经可以按照刚刚我们配置的方式来工作啦。当用户通过http://example.com
域名访问我们的服务器时,Nginx 会将它指向我们刚刚创建的 Html 页面。
第 6 步 学习 Nginx 文件及目录结构
到这一步,我们已经学会了如何在 Ubuntu 上安装和配置 Nginx 服务。接下来,我们来学习 Nginx 的文件及目录结构。
内容
-
/var/www/html
默认的 Web 页面。默认打开可以看到 Nginx 页面。 -
/var/www/html
实际的 Web 内容。默认请看下只有 Nginx 自己的原生页面。我们可以通过更改 Nginx 配置来更改文件。
服务器配置
-
/etc/nginx
Nginx 配置目录。所有 Nginx 的配置文件都在这里。 -
/etc/nginx/nginx.conf
Nginx 的配置文件。大多数全局配置可以通过这个文件来修改。 -
/etc/nginx/sites-available/sites-enabled
用来存储服务器下每个站点服务器块的目录。 默认情况下 Nginx 不会直接使用目录下的配置文件,需要我们更改配置来告诉 Nginx 来去读。 -
/etc/nginx/sites-enabled/sites-available
这里是存储已经启用站点服务器块的目录。 -
/etc/nginx/snippets
这个目录包含一些 Nginx 的配置文件。可打开详细查看这些配置文件到文档进行学习。
服务器日志
/var/log/nginx/access.log
这里是 Nginx 到日志文件,对 Web 服务器的每个请求都会记录在这个日志中。/var/log/nginx/error.log
记录 Nginx 运行过程中发生的错误日志。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)