0

0

nginx 配置从零开始

php中文网

php中文网

发布时间:2016-08-08 09:27:38

|

1347人浏览过

|

来源于php中文网

原创

转自:http://oilbeater.com/nginx/2014/12/29/nginx-conf-from-zero.html

基本概念

Nginx 最常的用途是提供反向代理服务,那么什么反向代理呢?正向代理相信很多大陆同胞都在这片神奇的土地上用过了,原理大致如下图:

代理服务器作为客户端这边的中介接受请求,隐藏掉真实的客户,向服务器获取资源。如果代理服务器在长城外的话还能顺便帮助我们实现翻越长城的目的。而反向代理顾名思义就是反过来代理服务器作为服务器的中介,隐藏掉真实提供服务的服务器,原理大致如下图:

这么做当然不是为了实现翻越长城,而是为了实现安全和负载均衡等一系列的功能。所谓安全指客户端的请求不会直接落到内网的服务器上而是通过代理做了一层转发,在这一层就可以实现安全过滤,流控,防 DDOS 等一系列策略。而负载均衡指我们可以水平扩展后端真正提供服务的服务器数量,代理按规则转发请求到各个服务器,使得各个服务器的负载接近均衡。

而 nginx 就是目前流行的这样一个反向代理服务。

安装

在 Ubuntu 下,可以舍去编译安装的过程,直接 apt-get

sudo apt-get install nginx

安装好之后可以直接通过:

sudo service nginx start

来启动 nginx 服务,nginx 默认设置了 80 端口的转发,我们可以再浏览器访问 http://locallhost 来进行检查。

初始配置

nginx 的默认配置文件位于

/etc/nginx/nginx.conf

学习配置最好的方式,就是从例子入手,我们先不看其他的配置,直接看和 nginx 默认页面相关的配置。在配置文件中有一行:

include /etc/nginx/sites-enabled/*;

这一行加载了一个外部的配置文件,sites-enabled 文件夹下只有一个 default 文件,这个外部的配置文件就是负责我们 nginx 的默认代理。将配置的内容缩水后,得到下面几行:

Replit Agent
Replit Agent

Replit最新推出的AI编程工具,可以帮助用户从零开始自动构建应用程序。

下载

server {
    server_name localhost;
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    location / {
    try_files $uri $uri/ =404;
    }
}

一个大型的网站通常会有很多下属的站点,有各自的服务器提供相应的服务,在 nginx 中我们可以通过一个叫虚拟主机的概念来将这些不同的服务配置隔离,这就是上面配置中的 server 的含义。举例来说 google 旗下有翻译和学术两款产品我们就可以在 nginx 的配置文件中配置两个 server,servername 分别为 translate.google.com 和 scholar.google.com,这样的话不同的 url 请求就会对应到 nginx 相应的设置,转发到不同的后端服务器上。这里的 servername 是和客户端 http 请求中的 host 行进行匹配的。

本例中 server_name 为 localhost,这就是为什么我们可以在浏览器通过 localhost 访问到页面的配置。下面两个 listen 分别对应了 ipv4 和 ipv6 下的监听端口如果设为 8080,那么我们就只能通过 localhost:8080 来访问到默认页面了。

default_server 的含义是指如果有其他 http 请求的 host 在 nginx 中不存在设置的话那么就用这个 server 的配置来处理。比如我们去访问 127.0.0.1 那么也会落到这个 server 来处理。

每个 url 请求都会对应的一个服务,nginx 进行处理转发或者是本地的一个文件路径,或者是其他服务器的一个服务路径。而这个路径的匹配是通过 location 来进行的。我们可以将 server 当做对应一个域名进行的配置,而 location 是在一个域名下对更精细的路径进行配置。

在这里 location 匹配 / 开始的所有请求,即 localhost 下的 /xxx 或者 /yyy 都要走下面的配置,除了这种简单粗暴的匹配,nginx 也支持正则和完全相等及其他的精细匹配方式。而 tryfiles 意思是 nginx 会按照接下来的顺序去访问文件,将第一个匹配的返回。比如你去请求 localhost/test,他会去寻找 /test 文件,找不到再去找 /test/ 再找不到就返回一个 404。此外我们还可以在 location 的配置里用 proxypass 实现反向代理和负载均衡,不过这个最简单的配置并没有涉及。

其中 root 是指将本地的一个文件夹作为所有 url 请求的根路径。比如用户请求了一个 localhost/test,那么 nginx 就会去需找 /usr/share/nginx/html 文件夹下的 test 文件返回。

而 index 就是默认的访问页面了,当我们访问 localhost 时,他会自动按顺序寻找 root 文件路径下的 index.html 和 index.htm 将第一个找到的结果返回。

location 进阶配置

上面的配置只是将用户的 url 映射到本地的文件,并没有实现传说中的反向代理和负载均衡(当然 nginx 做静态文件的分发也是想到的厉害),下面我们就来进一步配置 location 看看怎么实现。

配置起来很简单比如我要将所有的请求到转移到真正提供服务的一台机器的 8080 端口,只要这样:

location / {
    proxy_pass 123.34.56.67:8080;
}

这样所有的请求就都被反向代理到 123.34.56.67 去了。这样我们反向代理的功能是实现了,可是就能代理到一台服务器上哪有什么负载均衡呀?这就要用到 nginx 的 upstream 模块了。

upstream backend {
    ip_hash;    
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
    server backend4.example.com;
}
location / {
    proxy_pass http://backend;
}

我们在 upstream 中指定了一组机器,并将这个组命名为 backend,这样在 proxypass 中只要将请求转移到 backend 这个 upstream 中我们就实现了在四台机器的反向代理加负载均衡。其中的 iphash 指明了我们均衡的方式是按照用户的 ip 地址进行分配。

要让配置生效,我们不必重启 nginx 只需要 reload 配置即可。

sudo service nginx reload

总结

以上是最简单的通过 nginx 实现静态文件转发、反向代理和负载均衡的配置。在 nginx 中所有的功能都是通过模块来实现的,比如当我们配置 upstream 时是对 upstream 模块,而 server 和 location 是在 http core 模块,其他的还有流控的 limt 模块,邮件的 mail 模块,https 的 ssl 模块。他们的配置都是类似的可以再 nginx 的模块文档中找到详细的配置说明。


以上就介绍了nginx 配置从零开始,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

928

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

307

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

183

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

29

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

103

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

54

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

17

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

764

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

92

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.4万人学习

nginx浅谈
nginx浅谈

共15课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号