Nginx初始化配置的方法

发布时间 - 2023-05-19 00:00:00    点击率:

基本概念

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 的默认代理。将配置的内容缩水后,得到下面几行:

复制代码 代码如下:


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  # html  # include  # default  # location  # http  # ubuntu  # ddos  # 负载均衡  # 我们可以  # 配置文件  # 代理服务器  # 第一个  # 这就是  # 是指  # 长城  # 客户端  # 一台 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Passport实现OAuth2?(完整配置步骤)  android nfc常用标签读取总结  Python文件流缓冲机制_IO性能解析【教程】  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  北京的网站制作公司有哪些,哪个视频网站最好?  在线制作视频网站免费,都有哪些好的动漫网站?  使用豆包 AI 辅助进行简单网页 HTML 结构设计  如何在万网自助建站中设置域名及备案?  如何快速查询网站的真实建站时间?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  制作公司内部网站有哪些,内网如何建网站?  iOS正则表达式验证手机号、邮箱、身份证号等  微信小程序 wx.uploadFile无法上传解决办法  微信推文制作网站有哪些,怎么做微信推文,急?  javascript中的try catch异常捕获机制用法分析  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  Android okhttputils现在进度显示实例代码  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  微信小程序 闭包写法详细介绍  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  Laravel如何使用Service Container和依赖注入?(代码示例)  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  用v-html解决Vue.js渲染中html标签不被解析的问题  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  Laravel如何实现API资源集合?(Resource Collection教程)  Laravel如何集成Inertia.js与Vue/React?(安装配置)  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  如何用PHP工具快速搭建高效网站?  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  Laravel PHP版本要求一览_Laravel各版本环境要求对照  Laravel如何保护应用免受CSRF攻击?(原理和示例)  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  想要更高端的建设网站,这些原则一定要坚持!  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  JavaScript Ajax实现异步通信  如何快速登录WAP自助建站平台?  教你用AI润色文章,让你的文字表达更专业  网站制作壁纸教程视频,电脑壁纸网站?  如何快速查询网址的建站时间与历史轨迹?  深圳网站制作的公司有哪些,dido官方网站?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  如何用景安虚拟主机手机版绑定域名建站?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?