Nginx 在 Ubuntu 上的安装与配置指南
Nginx 在 Ubuntu 上的安装与配置指南
Ubuntu 的软件管理工具已经提供了 Nginx 的安装包,如果不需要借助 Docker 等其他容器化工具对 Nginx 进行管理,可以直接通过 Ubuntu 自带的软件管理工具轻松安装 Nginx。本指南将详细介绍 Nginx 的安装过程、安装后的检查方法、服务的管理以及基本的配置步骤,帮助你快速上手并正确使用 Nginx。
1. 安装 Nginx
安装 Nginx 非常简单,只需使用以下命令即可:
sudo apt install nginx
安装提示与确认
当你运行上述命令时,系统会显示一系列的信息,包括需要安装的依赖包、建议安装的包以及预计所需的磁盘空间等。以下是一个安装过程中的示例输出:
liubai@liubai:~/golang/src/AIAssistant$ sudo apt install nginx
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
libnginx-mod-http-geoip2 libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter libnginx-mod-mail
libnginx-mod-stream libnginx-mod-stream-geoip2 nginx-common nginx-core
Suggested packages:
fcgiwrap nginx-doc
The following NEW packages will be installed:
libnginx-mod-http-geoip2 libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter libnginx-mod-mail
libnginx-mod-stream libnginx-mod-stream-geoip2 nginx nginx-common nginx-core
0 upgraded, 9 newly installed, 0 to remove and 76 not upgraded.
Need to get 697 kB of archives.
After this operation, 2,395 kB of additional disk space will be used.
Do you want to continue? [Y/n]
处理安装提示
- 确认信息:阅读上述提示信息,了解将要安装的包和占用的磁盘空间。
- 输入确认:输入
Y
后按回车键,系统将开始下载和安装 Nginx 及其依赖包。等待安装过程完成。
验证安装
安装成功后,可以通过以下命令查看 Nginx 的版本,以确认安装是否成功:
nginx -v
示例输出:
nginx version: nginx/1.18.0 (Ubuntu)
此外,你也可以通过查看 Nginx 服务的状态,确认其是否已启动并正在运行:
sudo 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: enabled)
Active: active (running) since Fri 2025-03-21 11:04:19 CST; 1min 55s ago
Docs: man:nginx(8)
Process: 1652831 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 1652832 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 1652955 (nginx)
Tasks: 13 (limit: 18892)
Memory: 11.2M
CGroup: /system.slice/nginx.service
├─1652955 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
├─1652957 "nginx: worker process" ...
# 省略其他worker进程信息
注意事项:
- 上述命令中的
...
表示省略了部分重复的 worker 进程信息。 - 如果服务未启动,可使用
sudo systemctl start nginx
启动服务。
2. 配置 Nginx
安装完成后,通常需要根据具体需求对 Nginx 进行配置。默认情况下,apt 安装的 Nginx 的配置文件位于 /etc/nginx/nginx.conf
,这是 Nginx 的主配置文件。Nginx 的配置采用模块化设计,允许通过包含其他配置文件来组织和管理不同的站点或功能模块。
主配置文件
- 文件路径:
/etc/nginx/nginx.conf
- 作用:定义全局配置参数,如用户权限、工作进程数、错误日志位置等。它还包含对其他配置文件的引用,通常在
http
块中使用include
指令。
创建单独的配置文件
为了便于管理和维护,建议为每个站点或功能模块创建单独的配置文件。这些配置文件通常存放在 /etc/nginx/conf.d/
目录下,文件名以 .conf
结尾。Nginx 在启动时会自动加载该目录下的所有配置文件。
示例:创建 ssl.example.com.conf
sudo nano /etc/nginx/conf.d/ssl.example.com.conf
示例配置内容
server {
listen 443 ssl;
server_name ssl.example.com;
ssl_certificate /home/assistant/cert/server.eigiai.cn.pem;
ssl_certificate_key /home/assistant/cert/server.eigiai.cn.key;
# 超时配置
proxy_connect_timeout 600s; # 与后端服务器连接的超时时间
proxy_read_timeout 600s; # 从后端服务器读取数据的超时时间
proxy_send_timeout 600s; # 向后端服务器发送数据的超时时间
# 静态文件访问配置
location /company {
alias /var/www/company/;
index company_prototype.html;
add_header Cache-Control "no-cache, no-store, must-revalidate";
autoindex on;
}
# 原有请求转发逻辑
location / {
proxy_pass http://127.0.0.1:4443;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 以 /liubai 开头的请求转发逻辑,去掉 liubai 前缀
location ^~ /liubai {
rewrite ^/liubai(.*)$ $1 break;
proxy_pass http://127.0.0.1:4444;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
配置解释
-
监听端口与服务器名称:
listen 443 ssl;
:监听 443 端口并启用 SSL。server_name ssl.example.com;
:指定服务器名称,用于虚拟主机配置。
-
SSL 证书配置:
ssl_certificate
:指定 SSL 证书文件的路径。ssl_certificate_key
:指定 SSL 证书的私钥文件路径。
-
超时设置:
- 调整了与后端服务器连接和数据传输的超时时间,确保长时间运行的连接不会超时中断。
-
静态文件服务:
location /company
:当访问路径以/company
开头时,服务器将提供位于/var/www/company/
目录下的静态文件。add_header Cache-Control "..."
:设置缓存控制头,防止浏览器缓存相关内容。autoindex on;
:启用目录索引,允许用户浏览目录内容。
-
请求转发:
location /
:将所有根路径请求转发到http://127.0.0.1:4443
。location ^~ /liubai
:将所有以/liubai
开头的请求转发到http://127.0.0.1:4444
,并去掉前缀/liubai
。
3. 多个配置文件的加载与优先级
Nginx 在启动时会按照一定的顺序加载配置文件,理解这一过程有助于避免配置冲突和确保配置的正确应用。
加载顺序
- 主配置文件:首先加载
/etc/nginx/nginx.conf
。该文件中通常包含对其他配置文件的引用,如include /etc/nginx/conf.d/*.conf;
。 - 包含的配置文件:根据主配置文件中的
include
指令,依次加载/etc/nginx/conf.d/
目录下的所有.conf
文件。加载顺序通常按照文件名的字母顺序进行。
配置优先级与冲突处理
-
独立配置:每个在
/etc/nginx/conf.d/
目录下的.conf
文件都是独立的配置块,Nginx 会根据server_name
和listen
指令来区分不同的虚拟主机和监听端口。因此,只要各个配置文件的server_name
和listen
不冲突,它们之间不会互相干扰。 -
默认配置文件:如果存在多个配置文件定义了相同的
server_name
或listen
指令,Nginx 会按照加载顺序依次应用配置,后加载的配置可能会覆盖前面的配置。为了避免这种情况,建议:- 避免重复定义:确保每个站点或功能模块有唯一的
server_name
和监听端口。 - 使用包含文件的组织方式:将不同站点或模块的配置分开存放,减少冲突的可能性。
- 明确优先级:如果确实需要多个配置文件影响同一个站点,可以在主配置文件中使用
include
指令时,通过文件名的字母顺序来控制加载顺序,或者使用include
的优先级规则(如使用include /etc/nginx/conf.d/*.conf;
时,后面的文件会覆盖前面的同名配置)。
- 避免重复定义:确保每个站点或功能模块有唯一的
示例:默认配置文件与自定义配置
- 默认配置文件:通常为
/etc/nginx/sites-available/default
或/etc/nginx/nginx.conf
中的默认server
块。 - 自定义配置文件:如
/etc/nginx/conf.d/ssl.example.com.conf
。
注意:在现代 Ubuntu 版本中,Nginx 通常使用 sites-available
和 sites-enabled
目录来管理配置文件,通过符号链接将 sites-available
中的配置文件链接到 sites-enabled
目录。确保在自定义配置时,了解当前系统使用的配置管理方式,以避免冲突。
4. 测试配置文件
在应用配置之前,建议先测试配置文件的语法是否正确,以避免因配置错误导致服务无法启动或运行异常。
sudo nginx -t
示例输出:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
如果配置测试通过,你将看到上述输出。若有错误,请根据提示信息修复配置文件中的问题后再进行测试。
5. 启用 HTTPS 和重定向 HTTP 请求(可选)
为了增强安全性,通常建议将所有 HTTP 请求重定向到 HTTPS。你可以通过创建或修改默认的 HTTP 配置文件(如 default.conf
)来实现这一目的。
创建 HTTP 重定向配置
假设默认的 HTTP 配置文件位于 /etc/nginx/sites-available/default
,你可以编辑该文件或在其所在目录下创建一个符号链接的配置文件,例如 /etc/nginx/conf.d/default.conf
:
sudo nano /etc/nginx/conf.d/default.conf
示例配置
server {
listen 80;
server_name ssl.example.com;
# 将所有HTTP请求重定向到HTTPS
return 301 https://$host$request_uri;
}
配置解释
-
监听端口与服务器名称:
listen 80;
:监听 80 端口的 HTTP 请求。server_name ssl.example.com;
:与同名的 HTTPS 服务器保持一致。
-
重定向规则:
return 301 https://$host$request_uri;
:将所有 HTTP 请求永久重定向到对应的 HTTPS 地址。
6. 应用配置并重启 Nginx
完成配置测试且确认无误后,需要重新加载 Nginx 使配置生效。
sudo systemctl reload nginx
注意:在生产环境中,建议使用 reload
而非 restart
,因为 reload
会平滑地重新加载配置,而不会中断现有连接。
7. 其他管理命令
-
启动 Nginx:
sudo systemctl start nginx
-
停止 Nginx:
sudo systemctl stop nginx
-
禁用开机自启动:
sudo systemctl disable nginx
-
重新启用开机自启动:
sudo systemctl enable nginx