Nginx基础教程(3)Nginx开发环境搭建:Nginx开发环境搭建全攻略:从菜鸟到高手的奇幻旅程

发现楼下咖啡店老板居然用Nginx配置了不同咖啡的访问路径,我才意识到这玩意儿有多强大。

01 环境准备:不要输在起跑线上

在开始安装Nginx之前,充分的准备工作能让后续步骤事半功倍。这就好比做饭前要先洗菜切菜,直接下锅肯定会手忙脚乱。

系统环境选择

本教程以CentOS 7为例,但大部分步骤也适用于其他Linux发行版。确保你的系统已联网,并且具有root权限或sudo权限。

如果你使用的是Windows或Mac,建议先安装一个虚拟机软件如VMware,创建一个Linux环境。

依赖库安装

Nginx在编译过程中需要一些依赖库,就像汽车运行需要汽油一样。这些依赖库提供了Nginx所需的编译工具、正则表达式支持、压缩算法和安全通信等功能。

使用以下命令可以一次性安装所有必需的依赖:

yum install -y gcc gcc-c++ make automake pcre pcre-devel zlib zlib-devel openssl openssl-devel

这些依赖库各自有着重要的职责:

  • GCC编译器:Nginx是用C语言编写的,所以需要GCC来编译源码
  • PCRE库:支持正则表达式,用于URL重写等功能
  • zlib库:提供gzip压缩功能,减少网络传输量
  • OpenSSL库:为HTTPS提供加密通信支持

如果安装依赖时遇到问题,先检查yum源是否配置正确,网络连接是否正常。有时候简单的yum update就能解决很多问题。

02 安装Nginx:从源码到可执行文件

安装Nginx有两种常见方式:包管理器安装和源码编译安装。包管理器安装简单快捷,但源码编译安装可以自定义功能,更灵活。这里我们选择后者,就像自己动手组装电脑而不是买品牌机。

下载Nginx源码

访问Nginx官网(http://nginx.org/en/download.html)下载最新的稳定版本源码包。

为什么选择稳定版而不是主线版?因为稳定版经过更多测试,更适合生产环境,就像选择长期支持的系统版本一样可靠。

使用wget命令直接下载到服务器上:

cd /usr/local/src
wget http://nginx.org/download/nginx-1.26.1.tar.gz

如果你的服务器无法访问外网,可以先在本地下载,然后通过SFTP等工具上传到服务器。

解压与编译配置

解压下载的源码包并进入目录:

tar -zxvf nginx-1.26.1.tar.gz
cd nginx-1.26.1

接下来是编译前的配置,使用configure脚本:

./configure --prefix=/usr/local/nginx \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--with-http_ssl_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy

这些配置参数的意思是:

  • --prefix:指定Nginx安装目录
  • --pid-path:设置进程ID文件位置
  • --with-http_ssl_module:启用HTTPS支持
  • --http-client-body-temp-path:设置客户端请求临时文件路径

注意:/var/temp/nginx/client等临时目录需要手动创建。

如果配置过程中出现错误,仔细阅读错误信息,通常是缺少某些依赖库,安装相应依赖后重新配置即可。

编译与安装

配置完成后,执行编译和安装命令:

make
make install

编译过程可能需要几分钟,取决于服务器性能。如果编译出错,可以去网上搜索错误信息,大概率有人遇到过同样的问题。

安装完成后,Nginx会被安装到/usr/local/nginx目录下。可以通过ls /usr/local/nginx查看目录结构:

  • sbin:存放Nginx可执行文件
  • conf:存放配置文件
  • logs:存放日志文件
  • html:存放默认网站文件

03 配置Nginx:让交通警察知道规则

安装完Nginx后,它就像一个新雇用的交通警察,我们需要告诉它交通规则,也就是修改配置文件。

配置文件结构解析

Nginx的配置文件像一本书,有章节和小节,结构清晰:

main上下文(全局配置)
├─ events上下文(事件模型配置)
└─ http上下文(HTTP服务配置)
   ├─ server上下文(虚拟主机配置)
   │  ├─ location上下文(URL路由配置)
   │  └─ location上下文(更多路由规则)
   └─ server上下文(更多虚拟主机)

Nginx由一个主进程和多个工作进程组成。主进程的主要目的是读取和评估配置,以及维护工作进程。工作进程执行请求的实际处理。

默认情况下,配置文件名为nginx.conf,放置在/usr/local/nginx/conf目录下。

基础配置示例

下面是一个简单的配置示例,帮助我们理解配置文件的结构:

user www;
worker_processes 2;
error_log logs/error.log;
pid logs/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;

    server {
        listen 80;
        server_name localhost;

        location / {
            root /data/www;
            index index.html;
        }
    }
}

这些配置指令的含义是:

  • worker_processes:设置工作进程数,通常与CPU核心数相同
  • worker_connections:每个工作进程同时处理的最大连接数
  • sendfile:启用高效文件传输模式
  • keepalive_timeout:设置客户端连接保持活动的时间

启动与测试Nginx

进入Nginx的sbin目录,启动Nginx服务:

cd /usr/local/nginx/sbin
./nginx

检查Nginx是否成功启动:

ps -ef | grep nginx

如果看到Nginx进程,说明启动成功。还可以使用curl http://localhost测试,或者直接在浏览器中输入服务器IP地址查看欢迎页面。

常见问题:如果无法访问,可能是防火墙阻止了80端口。CentOS 7可以使用以下命令开放端口:

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

04 完整示例:实战虚拟主机配置

理论学习够了,让我们动手做一个实际示例,就像学做菜不能只看视频,还得亲自下厨。

需求分析

假设我们需要实现以下访问规则:

  • http://192.168.199.27:8081/server1/location1 访问:index_sr1_location1.html
  • http://192.168.199.27:8081/server1/location2 访问:index_sr1_location2.html
  • http://192.168.199.27:8082/server2/location1 访问:index_sr2_location1.html
  • http://192.168.199.27:8082/server2/location2 访问:index_sr2_location2.html

同时要求:资源不存在时返回自定义404页面,为不同server配置独立日志文件。

文件结构创建

首先创建所需的目录和文件:

# 创建404页面
touch /home/www/404.html

# 创建配置目录
mkdir -p /home/www/conf

# 创建网站目录
mkdir -p /home/www/myweb/server1/location1
mkdir -p /home/www/myweb/server1/location2
mkdir -p /home/www/myweb/server2/location1
mkdir -p /home/www/myweb/server2/location2

# 创建日志目录
mkdir -p /home/www/myweb/server1/logs
mkdir -p /home/www/myweb/server2/logs

在各个location目录中创建对应的HTML文件,比如/home/www/myweb/server1/location1/index.html内容可以是:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
    <h1>server1下面的location1下面的index.html</h1>
</body>
</html>

404页面可以设计得友好一些:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
    <h1>不好意思,程序小哥正在加紧维修中 ...... </h1>
</body>
</html>

配置Nginx主文件

备份原始配置文件后,编辑/usr/local/nginx/conf/nginx.conf:

user www;
worker_processes 2;
error_log logs/error.log;
pid logs/nginx.pid;

events {
    worker_connections 1024;
    use epoll;
}

http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;

    # 定义日志格式
    log_format server1 '===>server1 access log';
    log_format server2 '===>server2 access log';

    # 引用其他配置文件
    include /home/www/conf/*.conf;
}

注意第18行的include指令,它允许我们模块化配置,就像代码中引入外部库一样,让主配置更简洁。

配置虚拟主机

创建/home/www/conf/server1.conf:

server {
    listen 8081;
    server_name localhost;
    access_log /home/www/myweb/server1/logs/access.log server1;
    error_page 404 /404.html;

    location /server1/location1 {
        root /home/www/myweb;
        index index.html;
    }

    location /server1/location2 {
        root /home/www/myweb;
        index index.html;
    }

    location = /404.html {
        root /home/www;
        index 404.html;
    }
}

同样地,创建server2.conf:

server {
    listen 8082;
    server_name localhost;
    access_log /home/www/myweb/server2/logs/access.log server2;
    error_page 404 /404.html;

    location /server2/location1 {
        root /home/www/myweb;
        index index.html;
    }

    location /server2/location2 {
        root /home/www/myweb;
        index index.html;
    }

    location = /404.html {
        root /home/www;
        index 404.html;
    }
}

重启与测试

让新配置生效:

/usr/local/nginx/sbin/nginx -s reload

如果防火墙开启,需要开放8081和8082端口:

firewall-cmd --zone=public --add-port=8081/tcp --permanent
firewall-cmd --zone=public --add-port=8082/tcp --permanent
firewall-cmd --reload

现在可以通过浏览器访问测试各个地址,也可以故意访问不存在的路径测试404页面是否正常显示。

05 Nginx日常管理技巧

Nginx安装配置完成后,日常管理同样重要,就像买车后需要定期保养。

启动、停止和重新加载

Nginx提供了一些简单的命令参数来控制其行为:

# 启动Nginx
/usr/local/nginx/sbin/nginx

# 优雅停止(等待当前请求完成)
/usr/local/nginx/sbin/nginx -s quit

# 快速停止
/usr/local/nginx/sbin/nginx -s stop

# 重新加载配置文件
/usr/local/nginx/sbin/nginx -s reload

# 重新打开日志文件
/usr/local/nginx/sbin/nginx -s reopen

重新加载配置特别有用,它可以在不中断服务的情况下应用新配置,就像给飞行中的飞机更换零件。

问题排查技巧

当Nginx出现问题时,有几个排查步骤:

  1. 检查配置文件语法:/usr/local/nginx/sbin/nginx -t
  2. 查看错误日志:tail -f /usr/local/nginx/logs/error.log
  3. 查看访问日志:tail -f /usr/local/nginx/logs/access.log

日志文件就像Nginx的"黑匣子",记录了详细运行信息,是排查问题的第一手资料。

06 拓展知识:Nginx还能做什么?

除了作为Web服务器,Nginx还有更多强大的功能,就像一个瑞士军刀,除了刀片还有各种小工具。

反向代理服务器

Nginx可以作为反向代理,将客户端请求转发到后端服务器,并将响应返回给客户端,像一个大堂经理,接待客户并安排相应的服务人员。

配置示例:

server {
    location / {
        proxy_pass http://127.0.0.1:8080;
    }
    
    location /images/ {
        root /data;
    }
}

负载均衡

当网站流量增加时,Nginx可以将请求分发到多个后端服务器,平衡负载:

http {
    upstream myapp {
        server 127.0.0.1:8080 weight=3;
        server 127.0.0.1:8081 weight=1;
    }
    
    server {
        location / {
            proxy_pass http://myapp;
        }
    }
}

这个配置将请求按照3:1的比例分发到两个后端服务器。

其他常用模块

Nginx有丰富的模块生态系统,可以扩展其功能:

  • 重写模块:实现URL重写和重定向
  • 防盗链模块:防止其他网站直接链接你的资源
  • HTTPS模块:提供安全的加密通信
  • 压缩模块:减小传输文件大小,提高速度

结语:从小白到大神的必经之路

通过本教程,你已经完成了Nginx开发环境的搭建,并实现了一个多虚拟主机的配置示例。就像学会了开车的基本操作,接下来需要的是多多练习和实际应用。

Nginx的学习路径很长,从基础配置到高性能优化,再到结合Lua脚本的OpenResty,每一步都能解锁新的技能。

记住,每个Nginx专家都曾是初学者,关键在于动手实践不断尝试。遇到问题时,官方文档和社区是你的好朋友。

现在,你已经迈出了成为Nginx大神的第一步,继续前进吧!


附录:常用命令速查表

功能

命令

启动Nginx

/usr/local/nginx/sbin/nginx

停止Nginx

/usr/local/nginx/sbin/nginx -s stop

重新加载配置

/usr/local/nginx/sbin/nginx -s reload

检查配置

/usr/local/nginx/sbin/nginx -t

查看进程

`ps -ef

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

值引力

持续创作,多谢支持!

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

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

打赏作者

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

抵扣说明:

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

余额充值