当前位置: 首页 > article >正文

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 在启动时会按照一定的顺序加载配置文件,理解这一过程有助于避免配置冲突和确保配置的正确应用。

加载顺序

  1. 主配置文件:首先加载 /etc/nginx/nginx.conf。该文件中通常包含对其他配置文件的引用,如 include /etc/nginx/conf.d/*.conf;
  2. 包含的配置文件:根据主配置文件中的 include 指令,依次加载 /etc/nginx/conf.d/ 目录下的所有 .conf 文件。加载顺序通常按照文件名的字母顺序进行。

配置优先级与冲突处理

  • 独立配置:每个在 /etc/nginx/conf.d/ 目录下的 .conf 文件都是独立的配置块,Nginx 会根据 server_namelisten 指令来区分不同的虚拟主机和监听端口。因此,只要各个配置文件的 server_namelisten 不冲突,它们之间不会互相干扰。

  • 默认配置文件:如果存在多个配置文件定义了相同的 server_namelisten 指令,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-availablesites-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
    

http://www.kler.cn/a/596628.html

相关文章:

  • 蓝桥杯2024B组
  • LeetCode 91 —— 91.解码方法
  • Vue3 基础语法指南:Setup 函数详解
  • 存储过程触发器习题整理1
  • 深度解读 C 语言运算符:编程运算的核心工具
  • 信息系统运行管理员教程3--信息系统设施运维
  • 不做颠覆者,甘为连接器,在技术叠层中培育智能新物种
  • 更改 vscode ! + table 默认生成的 html 初始化模板
  • Java对象的hashcode
  • Fourier-Lerobot——把斯坦福人形动作策略iDP3封装进了Lerobot(含我司七月人形研发落地实践)
  • 基于javaweb的SSM+Maven电脑公司财务管理系统设计与实现(源码+文档+部署讲解)
  • Java的流程控制
  • 再学:delegateCall使用及合约升级
  • 4小时速通shell外加100例
  • Linux笔记---文件系统软件部分
  • 构音障碍(Dysarthria)研究全景总结(1996–2024)
  • 在Windows和Linux系统上的Docker环境中使用的镜像是否相同
  • 常考计算机操作系统面试习题(二)(中)
  • C语言-排序
  • WSL 导入完整系统包教程