Nginx基础教程(2)Nginx安装及配置:Nginx?安排!从安装到配置,让你的服务器告别“996”

一、 你的服务器,需要一个“超级管家”

想象一下这个场景:你的网站就像一个热门奶茶店,一开始顾客(用户请求)三三两两,你一个人(老旧的服务器架构)还能忙得过来。突然有一天,你家奶茶因为某个短视频爆火,门口瞬间排起了几百米的长队(高并发访问)。结果呢?你手忙脚乱,做一杯洒半杯,最后直接累趴下——服务器崩溃,页面一片空白。

这,就是很多Web服务器(比如Apache的默认模式)面临的窘境:一个进程服务一个顾客,顾客多了,就直接忙到宕机。

这时候,你就需要一个像Nginx这样的“超级管家”兼“金牌导流员”。它不直接去做奶茶(处理业务逻辑),而是站在门口,眼观六路,耳听八方:

  • “先生,这边请!” —— 把静态文件(如图片、CSS)的请求,直接秒速响应。
  • “女士,您的定制奶茶在里面制作!” —— 把动态请求(如PHP、Python程序)高效地转交给后端的“奶茶师傅”(如PHP-FPM)。
  • “大家别挤,排好队,都能喝上!” —— 通过负载均衡,把流量均匀分给后端的多个应用服务器。

这样一来,你的“奶茶店”井井有条,应对千人长队也面不改色。Nginx就是这么牛,它以事件驱动、异步非阻塞的架构闻名,用极少的资源就能处理海量的连接,堪称服务器界的“性能怪兽”。

今天,咱就把它“请”到你的服务器上,并把它调教得服服帖帖!

二、 把Nginx“请”进家门:两种安装姿势,任君挑选

安装Nginx,主要有两种路子:一种是直接用系统自带的包管理器,省心省力,适合新手和快速部署;另一种是源码编译,自由度拉满,适合爱折腾、有定制化需求的老鸟。

姿势一:佛系安装法——包管理器,一键搞定

这种方法最适合我们这些“懒人”,几条命令下去,系统就帮你把事办得明明白白。

1. Ubuntu/Debian 系统(apt-get大法好):

# 首先,更新一下软件源,确保拿到的是最新鲜的“食材”
sudo apt-get update

# 然后,直接安装Nginx
sudo apt-get install nginx

# 安装完成后,启动Nginx服务
sudo systemctl start nginx

# 设置开机自启,这样哪怕服务器重启,它也能自己“爬起来”干活
sudo systemctl enable nginx

2. CentOS/RHEL 系统(yum/dnf 真香):
对于CentOS 8+或Rocky Linux,推荐用dnf

# 同样,先更新
sudo dnf update

# 安装Nginx
sudo dnf install nginx

# 启动并开机自启
sudo systemctl start nginx
sudo systemctl enable nginx

安装完成后,别急,先验验货。打开你的浏览器,输入你的服务器IP地址(比如 http://你的服务器IP)。如果看到一个写着 “Welcome to nginx!” 的页面,恭喜你!这说明Nginx已经成功安装并运行了。

姿势二:硬核安装法——源码编译,我的地盘我做主

为啥要自己编译?好处太多了:你可以选择最新的稳定版本,可以裁剪掉不需要的模块,可以加入自定义的模块,还可以针对你的服务器CPU进行极致优化。

来吧,展示!

步骤1:准备“厨房”——安装编译工具和依赖库

# 对于Ubuntu/Debian
sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev -y

# 对于CentOS/RHEL
sudo yum groupinstall "Development Tools" -y
sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel -y

步骤2:下载“食材”——Nginx源码包
去Nginx官网(nginx.org)找到最新的稳定版(Stable version)源码包链接,用wget下载。

# 进入一个临时目录,比如 /tmp
cd /tmp
# 下载(请替换为最新版本的链接)
wget https://nginx.org/download/nginx-1.24.0.tar.gz
# 解压
tar -zxvf nginx-1.24.0.tar.gz
# 进入解压后的目录
cd nginx-1.24.0

步骤3:配置“菜谱”——执行configure脚本
这是最关键的一步,决定了Nginx最终会有什么功能。

./configure \
--prefix=/usr/local/nginx \      # 安装目录,自己喜欢放哪就改哪
--sbin-path=/usr/sbin/nginx \    # 主程序路径
--conf-path=/etc/nginx/nginx.conf \ # 主配置文件路径
--pid-path=/var/run/nginx.pid \  # 进程ID文件路径
--with-http_ssl_module \         # 开启SSL模块,支持HTTPS必须!
--with-http_v2_module \          # 开启HTTP/2模块
--with-http_stub_status_module \ # 开启状态页模块,用于监控
--with-threads \                 # 使用线程池,提升性能
--with-file-aio                  # 使用异步文件I/O,提升性能

这一大串命令看起来吓人,其实就是在“点菜”。执行后,如果最后看到 configuration is successful,就说明配置成功。

步骤4:开火“烹饪”——编译和安装

# 编译,-j参数表示用所有CPU核心并行编译,速度更快
make -j $(nproc)

# 安装
sudo make install

步骤5:让“管家”上岗——创建系统服务
源码安装的Nginx不会自动创建服务文件,需要我们手动搞一个,方便用systemctl管理。

sudo vim /etc/systemd/system/nginx.service

在里面写入以下内容:

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

然后重新加载系统服务并启动:

sudo systemctl daemon-reload
sudo systemctl start nginx
sudo systemctl enable nginx

至此,无论你用哪种方式,Nginx都已经在你的服务器上“安家落户”了。

三、 深度解剖:Nginx配置文件的“黑话”指南

Nginx的强大,几乎都体现在它的配置文件上。它的主配置文件通常叫 nginx.conf。别看它里面一堆符号和英文,其实结构非常清晰,就像一本有章有节的书。

核心结构:万物皆“块” (Context)

Nginx配置的核心是“块”,或者叫“上下文”。它们像俄罗斯套娃一样,层层嵌套。

  • main (全局块): 最外层的配置,影响Nginx整体运行。比如工作进程数、用户、连接数等。
user nginx; # 指定Nginx进程运行的用户和用户组,安全考虑
worker_processes auto; # 工作进程数,设为auto通常是最佳实践,让它自动根据CPU核心数设置
error_log /var/log/nginx/error.log warn; # 错误日志路径和级别
pid /var/run/nginx.pid; # 存放主进程ID的文件
  • events (事件块): 配置事件驱动模型的参数。这是Nginx高性能的“发动机”。
events {
    worker_connections 1024; # 每个工作进程能同时处理的最大连接数。总连接数 = worker_processes * worker_connections
    use epoll; # 在Linux上,使用epoll这种高效的事件模型(通常会自动选择,可以不写)
    multi_accept on; # 一个工作进程可以同时接受多个新连接
}
  • http (HTTP块): 这是配置的重中之重!所有HTTP相关的功能都在这里定义。
    • 它内部可以包含多个 server 块,每个server块就代表一个虚拟主机(一个网站)。
    • server块内部又可以包含多个 location 块,用于匹配不同的URI(请求路径),并进行不同的处理。

“黑话”翻译官:看懂核心指令

  • server块: 定义一个虚拟主机。靠 listenserver_name 来识别。
server {
    listen 80; # 监听80端口
    server_name example.com www.example.com; # 域名,只有通过这个域名访问,才会进入这个server块
    ... # 这个网站的其他配置
}
  • location块: 灵魂所在!它决定了“什么样的请求,该去哪里”。
    • 匹配符号:
      • = /logo.png精确匹配,只匹配 /logo.png 这个请求。
      • ^~ /static/优先前缀匹配,匹配以 /static/ 开头的所有请求,且一旦匹配,不再检查正则。
      • ~ \.php$区分大小写的正则匹配,匹配所有以 .php 结尾的请求。
      • ~* \.(jpg|png)$不区分大小写的正则匹配,匹配所有以 .jpg.png 结尾的请求。
      • /通用匹配,匹配所有请求。
    • “潜台词”与“行动”:
      • root /var/www/html;设定根目录。当请求 /index.html 时,Nginx会去 /var/www/html/index.html 找文件。
      • index index.html index.htm;设定默认首页。当请求是一个目录时,按顺序找这些文件。
      • proxy_pass http://backend_server;反向代理。把请求转发给后面定义的 backend_server
      • try_files $uri $uri/ =404;“尝试”大法。先找 $uri 这个文件,如果找不到,就找 $uri 这个目录,再找不到就返回404。这在配置前端应用时非常有用。
四、 实战!手把手配置一个完整的虚拟主机

光说不练假把式。现在我们来实战配置一个网站,假设域名叫 my-awesome-site.com。我们要实现:

  1. 用HTTP服务这个网站。
  2. 将所有访问 my-awesome-site.com 的请求,重定向到 www.my-awesome-site.com
  3. 配置一个PHP应用(比如WordPress)的支持。

步骤1:准备网站目录和文件

# 创建网站根目录
sudo mkdir -p /var/www/my-awesome-site

# 创建一个测试的HTML文件
sudo echo "<h1>Hello from My Awesome Site! (HTML)</h1>" > /var/www/my-awesome-site/index.html

# 创建一个测试的PHP文件(确保服务器已安装PHP-FPM)
sudo echo "<?php phpinfo(); ?>" > /var/www/my-awesome-site/info.php

# 修改目录所有者,确保Nginx有权限读取(假设Nginx运行用户是www-data或nginx)
sudo chown -R www-data:www-data /var/www/my-awesome-site # Ubuntu
# 或者 sudo chown -R nginx:nginx /var/www/my-awesome-site # CentOS

步骤2:在主配置文件中引入自定义配置
一个好的习惯是,不在主 nginx.conf 里写一大堆,而是为每个站点创建一个独立的配置文件,然后在主配置里用 include 引入。
nginx.confhttp 块里,确保有这样一行:

http {
    ...
    include /etc/nginx/conf.d/*.conf; # 通常这个目录用于存放站点配置
    # 或者 include /etc/nginx/sites-enabled/*; # 这也是一个常见的做法
}

步骤3:创建站点配置文件
我们在 /etc/nginx/conf.d/ 下创建一个文件:

sudo vim /etc/nginx/conf.d/my-awesome-site.conf

然后把下面的配置“抄”进去:

# 重定向 my-awesome-site.com 到 www.my-awesome-site.com
server {
    listen 80;
    server_name my-awesome-site.com;
    return 301 http://www.my-awesome-site.com$request_uri; # 301永久重定向
}

# 主站点配置:www.my-awesome-site.com
server {
    listen 80;
    server_name www.my-awesome-site.com;

    # 设定根目录和默认首页
    root /var/www/my-awesome-site;
    index index.html index.php;

    # location / 处理所有请求
    location / {
        try_files $uri $uri/ /index.php?$args; # 对于前端路由或WordPress友好链接很重要
    }

    # 处理PHP请求,转发给PHP-FPM处理
    location ~ \.php$ {
        # 引入一些通用配置片段(如果存在)
        include fastcgi_params;
        # 指定PHP-FPM监听的地址,根据你的PHP安装情况调整
        # 可能是 sock 文件,也可能是 127.0.0.1:9000
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # 请根据实际PHP版本修改
        fastcgi_index index.php;
        # 告诉PHP-FPM要执行的脚本路径
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # 静态文件缓存配置,提升性能
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires 30d; # 客户端缓存30天
        add_header Cache-Control "public, immutable";
    }

    # 禁止访问 .htaccess 等敏感文件
    location ~ /\.ht {
        deny all;
    }
}

步骤4:检查并“激活”配置
Nginx对语法要求极其严格,一个分号错了都可能导致服务启动失败。所以,每次修改配置后,必须检查语法。

sudo nginx -t

如果看到 syntax is oktest is successful,就说明配置没毛病。

然后,重新加载配置,让改动生效(平滑重启,不会中断现有连接):

sudo nginx -s reload
# 或者用 systemctl
sudo systemctl reload nginx

步骤5:验收成果
现在,打开浏览器(你可能需要在本地的hosts文件里先把域名指向你的服务器IP进行测试):

  • 访问 http://www.my-awesome-site.com,你应该看到 "Hello from My Awesome Site! (HTML)"。
  • 访问 http://www.my-awesome-site.com/info.php,你应该看到PHP的信息页面(如果PHP配置正确)。
  • 访问 http://my-awesome-site.com,它会自动跳转到带 www 的版本。

看到这里,你已经成功配置了一个功能完整的Nginx虚拟主机!

五、 进阶骚操作:反向代理与负载均衡

Nginx的绝活远不止于此。它还是个反向代理和负载均衡大师。

场景: 你的应用是用Python(Django/Flask)或Node.js写的,它运行在 http://127.0.0.1:8000 上。你希望用户通过80端口访问你的域名时,Nginx能把请求转发给这个应用。

配置示例:
在你的 server 块里,这样写:

server {
    listen 80;
    server_name my-app.com;

    location / {
        # 反向代理的核心指令
        proxy_pass http://127.0.0.1:8000;

        # 以下是一些重要的代理设置,确保后端应用能拿到正确的客户端信息
        proxy_set_header Host $host; # 传递原始请求的Host头
        proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递代理链IP
        proxy_set_header X-Forwarded-Proto $scheme; # 传递原始协议(http/https)
    }
}

如果你的应用流量巨大,一个后端实例顶不住了,Nginx还可以帮你做负载均衡

# 在http块内,定义一个上游服务器组 (upstream)
http {
    upstream my_app_backend {
        # 你可以配置多种策略,如轮询(默认)、权重(weight)、IP哈希(ip_hash)等
        server 127.0.0.1:8001 weight=3; # 权重3,处理更多请求
        server 127.0.0.1:8002;
        server 127.0.0.1:8003 backup; # 备份服务器,只有当主服务器都挂了才启用
    }

    server {
        listen 80;
        server_name my-app.com;

        location / {
            # 把请求代理到上游服务器组
            proxy_pass http://my_app_backend;
            ... # 其他proxy_set_header配置照旧
        }
    }
}

这样一来,Nginx就会把流量按照你设定的策略,分发给后端的多个应用实例,实现水平扩展,让你的应用真正具备“扛压”能力。

六、 尾声:你的Nginx之旅,才刚刚开始

恭喜你!走完了从安装、配置到实战的完整流程。你现在已经不再是那个对Nginx一无所知的“小白”了。你已经掌握了:

  • 两种主流的安装方法。
  • 配置文件的核心结构和“黑话”指令。
  • 独立配置一个虚拟主机并支持PHP。
  • 了解了反向代理和负载均衡的基本玩法。

Nginx的世界博大精深,还有更多高级特性等着你去探索,比如缓存优化、安全加固、SSL/TLS证书配置(上HTTPS)、流量限制、动静分离的极致优化等等。

记住,最好的学习方式就是不断折腾。找一台测试服务器,大胆地去修改配置,去sudo nginx -t,去sudo nginx -s reload,甚至故意写错看看报错信息。在这个过程中,你会对这位“超级管家”的了解越来越深。

最终,你会让它成为你服务器架构中那个最可靠、最高效的基石。现在,就去让你的服务器告别“996”,享受Nginx带来的丝滑体验吧!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值