nginx配置代理服务器
off999 2025-01-14 16:25 17 浏览 0 评论
设置一个简单的代理服务器
nginx 的一个常见用途是作为一个代理服务器,作用是接收请求并转发给被代理的服务器,从中取得响应,并将其发送回客户端。
我们将配置一个基本的代理服务器,它为图片请求提供的文件来自本地目录,并将所有其它请求发送给代理的服务器。在此示例中,两个服务器在单个 nginx 实例上定义。
首先,通过向 nginx 的配置文件添加一个 server 块来定义代理服务器,其中包含以下内容:
server {
listen 8080; #监听的端口
root /data/up1; #根目录
location / {
#代理服务器设置区域
}
}
这是一个监听 8080 端口的简单服务器(以前,由于使用了标准 80 端口,所以没有指定 listen 指令),并将所有请求映射到本地文件系统上的 /data/up1 目录。创建此目录并将 index.html 文件放入其中。请注意,root 指令位于 server 上下文中。当选择用于处理请求的 location 块自身不包含 root 指令时,将使用此 root 指令。
接下来,在上一节中的服务器配置基础上进行修改,使其成为代理服务器配置。在第一个 location 块中,使用参数指定的代理服务器的协议,域名和端口(在本例中为 http://localhost:8080)放置在 proxy_pass 指令处:
server {
location / {
proxy_pass http://localhost:8080;
}
location /images/ {
root /data;
}
}
我们将修改使用了 /images/ 前缀将请求映射到 /data/images 目录下的文件的第二个 location 块,使其与附带常见的图片文件扩展名的请求相匹配。修改后的 location 块如下所示:
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
该参数是一个正则表达式,匹配所有以.gif,.jpg 或 .png 结尾的 URI。正则表达式之前应该是 ~。相应的请求将映射到 /data/images 目录。
当 nginx 选择一个 location 块来提供请求时,它首先检查指定前缀的 location 指令,记住具有最长前缀的 location,然后检查正则表达式。如果与正则表达式匹配,nginx 会选择此 location,否则选择更早之前记住的那一个。
代理服务器的最终配置如下:
server {
location / {
proxy_pass http://localhost:8080/;
}
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}
此 server 将过滤以 .gif,.jpg 或 .png 结尾的请求,并将它们映射到 /data/images 目录(通过向 root 指令的参数添加 URI),并将所有其它请求传递到上面配置的代理服务器。
要使新配置立即生效,请将重新加载配置文件信号(reload)发送到 nginx,如前几节所述。
还有更多的指令可用于进一步配置代理连接。
设置 FastCGI 代理
nginx 可被用于将请求路由到运行了使用各种框架和 PHP 等编程语言构建的应用程序的 FastCGI 服务器。
与 FastCGI 服务器协同工作的最基本的 nginx 配置是使用 fastcgi_pass 指令而不是 proxy_pass 指令,以及 fastcgi_param 指令来设置传递给 FastCGI 服务器的参数。假设 FastCGI 服务器可以在 localhost:9000 上访问。以上一节的代理配置为基础,用 fastcgi_pass 指令替换 proxy_pass 指令,并将参数更改为 localhost:9000。在 PHP 中,SCRIPT_FILENAME 参数用于确定脚本名称,QUERY_STRING 参数用于传递请求参数。最终的配置将是:
复制代码server {
location / {
fastcgi_pass localhost:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
}
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
location ~ .*\.(js|css)?$ #代表js和css的文件进行缓存12小时 日志输出到黑洞
{
expires 12h;
error_log /dev/null;
access_log /dev/null;
}
}
这里设置一个 server,将除了静态图片请求之外的所有请求路由到通过 FastCGI 协议在 localhost:9000 上运行的代理服务器。
相关推荐
- 如何理解python中面向对象的类属性和实例属性?
-
类属性和实例属性类属性就是给类对象中定义的属性通常用来记录与这个类相关的特征类属性不会用于记录具体对象的特征类属性的理解:类属性是与类自身相关联的变量,而不是与类的实例关联。它们通...
- Java程序员,一周Python入门:面向对象(OOP) 对比学习
-
Java和Python都是**面向对象编程(OOP)**语言,无非是类、对象、继承、封装、多态。下面我们来一一对比两者的OOP特性。1.类和对象Java和Python都支持面向对象...
- 松勤技术精选:Python面向对象魔术方法
-
什么是魔术方法相信大家在使用python的过程中经常会看到一些双下划线开头,双下划线结尾的方法,我们把它统称为魔术方法魔术方法的特征魔术方法都是双下划线开头,双下划线结尾的方法魔术方法都是pytho...
- [2]Python面向对象-【3】方法(python3 面向对象)
-
方法的概念在Python中,方法是与对象相关联的函数。方法可以访问对象的属性,并且可以通过修改对象的属性来改变对象的状态。方法定义在类中,可以被该类的所有对象共享。方法也可以被继承并重载。方法的语法如...
- 一文带你理解python的面向对象编程(OOP)
-
面向对象编程(OOP,Object-OrientedProgramming)是一个较难掌握的概念,而Python作为一门面向对象的语言,在学习其OOP特性时,许多人都会对“继承”和“多态”等...
- 简单学Python——面向对象1(编写一个简单的类)
-
Python是一种面向对象的编程语言(ObjectOrientedProgramming),在Python中所有的数据类型都是对象。在Python中,也可以自创对象。什么是类呢?类(Class)是...
- python进阶突破面向对象——四大支柱
-
面向对象编程(OOP)有四大基本特性,通常被称为"四大支柱":封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)和抽象(Abstrac...
- Python学不会来打我(51)面向对象编程“封装”思想详解
-
在面向对象编程(Object-OrientedProgramming,简称OOP)中,“封装(Encapsulation)”是四大核心特性之一(另外三个是继承、多态和抽象),它通过将数据(属性)和...
- Python之面向对象:对象属性解析:MRO不够用,补充3个方法
-
引言在前面的文章中,我们谈及Python在继承关系,尤其是多继承中,一个对象的属性的查找解析顺序。由于当时的语境聚焦于继承关系,所以只是简要提及了属性解析顺序同方法的解析顺序,而方法的解析顺序,在Py...
- Python之面向对象:通过property兼顾属性的动态保护与兼容性
-
引言前面的文章中我们简要提及过关于Python中私有属性的使用与内部“名称混淆”的实现机制,所以,访问私有属性的方法至少有3种做法:1、使用实例对象点操作符的方式,直接访问名称混淆后的真实属性名。2、...
- Python之面向对象:私有属性是掩耳盗铃还是恰到好处
-
引言声明,今天的文章中没有一行Python代码,更多的是对编程语言设计理念的思考。上一篇文章中介绍了关于Python面向对象封装特性的私有属性的相关内容,提到了Python中关于私有属性的实现是通过“...
- Python中的私有属性与方法:解锁面向对象编程的秘密
-
Python中的私有属性与方法:解锁面向对象编程的秘密在Python的广阔世界里,面向对象编程(OOP)是一种强大而灵活的方法论,它帮助我们更好地组织代码、管理状态,并构建可复用的软件组件。而在这个框...
- Python 面向对象:掌握类的继承与组合,让你的代码更高效!
-
引言:构建高效代码的基石Python以其简洁强大的特性,成为众多开发者首选的编程语言。而在Python的面向对象编程(OOP)范畴中,类的继承和组合无疑是两大核心概念。它们不仅能帮助我们实现代码复用,...
- python进阶-Day2: 面向对象编程 (OOP)
-
以下是为Python进阶Day2设计的学习任务,专注于面向对象编程(OOP)的核心概念和高阶特性。代码中包含详细注释,帮助理解每个部分的实现和目的。任务目标:复习OOP基础:类、对象、继...
- 外婆都能学会的Python教程(二十八):Python面向对象编程(二)
-
前言Python是一个非常容易上手的编程语言,它的语法简单,而且功能强大,非常适合初学者学习,它的语法规则非常简单,只要按照规则写出代码,Python解释器就可以执行。下面是Python的入门教程介绍...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python重命名文件 (54)
- python面向对象编程 (60)
- python串口编程 (60)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)