찾다
운영 및 유지보수엔진스Nginx 역방향 프록시의 HTTP 동사 및 경로 기반 ACL 구성
Nginx 역방향 프록시의 HTTP 동사 및 경로 기반 ACL 구성Jun 10, 2023 am 09:22 AM
nginxacl역방향 프록시

Nginx는 고성능 웹 서버이자 역방향 프록시 서버로, 강력한 구성 기능을 통해 Nginx를 다양한 시나리오에서 사용할 수 있습니다. 그 중 HTTP 동사와 경로를 기반으로 한 ACL 구성은 Nginx 역방향 프록시에서 일반적으로 사용되는 방법입니다. 이 기사에서는 그 원리와 구현 방법을 소개합니다.

1. ACL

ACL(Access Control List)의 개념은 규칙 기반 접근 제어 기술인 접근 제어 목록입니다. 일부 규칙을 정의하면 다양한 방문자를 구별하고 다양한 액세스 제어를 가질 수 있습니다.

Nginx 역방향 프록시에서는 ACL을 사용하여 서로 다른 역방향 프록시 전략을 구현하기 위해 서로 다른 요청을 구분할 수 있습니다. 특히, HTTP 요청의 동사와 경로를 일치시켜 요청을 분류하고 다른 백엔드 서버로 전달할 수 있습니다.

2. HTTP 동사와 경로 일치

HTTP 프로토콜은 GET, POST, PUT, DELETE 등과 같이 일반적으로 사용되는 일부 HTTP 동사를 정의합니다. HTTP 동사는 Nginx 구성의 $request_method 변수를 통해 얻을 수 있는 클라이언트의 요청 유형을 나타내는 데 사용될 수 있습니다.

HTTP 동사 외에도 경로도 요청 유형을 결정하는 중요한 요소입니다. 경로는 Nginx 구성의 $request_uri 변수를 통해 얻을 수 있는 요청된 리소스 위치를 나타내는 데 사용될 수 있습니다.

3. ACL 기반 구성 방법

Nginx에서는 if 문을 사용하여 ACL 규칙을 작성할 수 있습니다. if 문의 구문은 다음과 같습니다.

if (조건) {

// do something

}

여기서 조건은 현재 요청이 규칙을 준수하는지 여부를 결정하는 데 사용되는 표현식입니다. 규칙이 충족되면 중괄호로 묶인 코드 블록의 작업이 수행됩니다.

HTTP 동사 및 경로를 기반으로 하는 ACL 구성에서는 if 문의 중첩을 통해 규칙 일치를 달성할 수 있습니다. 구체적으로는 먼저 HTTP 동사를 판단한 다음 경로를 판단할 수 있습니다. 샘플 코드는 다음과 같습니다.

if ($request_method = 'GET') {

if ($request_uri = '/users') {
    proxy_pass http://backend1;
}
if ($request_uri = '/orders') {
    proxy_pass http://backend2;
}

}
if ($request_method = 'POST') {

if ($request_uri = '/users') {
    proxy_pass http://backend3;
}
if ($request_uri = '/orders') {
    proxy_pass http://backend4;
}

}

위 샘플 코드에서 먼저 HTTP 동사는 GET 또는 POST이며 경로를 판단하고 마지막으로 일치하는 결과를 기반으로 전달할 다른 백엔드 서버를 선택합니다.

4. ACL 규칙 최적화

if 문을 사용하여 HTTP 동사 및 경로를 기반으로 ACL 구성을 구현할 수 있지만 if 문에도 몇 가지 단점이 있습니다. 특히, if 문의 일치 규칙은 순서대로 일치됩니다. 규칙 수가 많으면 일치 효율성이 매우 낮아집니다.

이 문제를 해결하려면 Nginx의 지도 명령을 사용하여 최적화할 수 있습니다. map 명령어는 다양한 변수를 다양한 값으로 매핑함으로써 if 문의 중첩 관계를 단순화하고 일치 효율성을 향상시킬 수 있습니다.

다음은 map 지시어를 기반으로 한 ACL 구성 예제 코드입니다.

map $request_method$request_uri $backend {

default                     http://backend0;
GET/users                   http://backend1;
GET/orders                  http://backend2;
POST/users                  http://backend3;
POST/orders                 http://backend4;

}
server {

...
location / {
    proxy_pass              $backend;
}
...

}

위 예제 코드에서 map 지시어는 $ request_method 및 $ request_uri 변수의 조합은 다른 $backend 변수 값에 매핑됩니다. 후속 Proxy_pass 지시문에서는 $backend 변수가 요청을 전달하는 데 직접 사용됩니다.

5. 요약

HTTP 동사 및 경로를 기반으로 하는 ACL 구성은 Nginx 리버스 프록시에서 일반적으로 사용되는 기술로, 다양한 요청을 분류하여 다양한 백엔드 서버로 전달하는 데 사용할 수 있습니다. 특정 구현 프로세스에서는 if 문이나 map 명령을 사용하여 규칙을 일치시킬 수 있습니다. 특히 더 복잡한 ACL 규칙의 경우 map 명령을 사용하면 일치 효율성이 향상되어 시스템 성능이 향상될 수 있습니다.

위 내용은 Nginx 역방향 프록시의 HTTP 동사 및 경로 기반 ACL 구성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
内存飙升!记一次nginx拦截爬虫内存飙升!记一次nginx拦截爬虫Mar 30, 2023 pm 04:35 PM

本篇文章给大家带来了关于nginx的相关知识,其中主要介绍了nginx拦截爬虫相关的,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

nginx限流模块源码分析nginx限流模块源码分析May 11, 2023 pm 06:16 PM

高并发系统有三把利器:缓存、降级和限流;限流的目的是通过对并发访问/请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务(定向到错误页)、排队等待(秒杀)、降级(返回兜底数据或默认数据);高并发系统常见的限流有:限制总并发数(数据库连接池)、限制瞬时并发数(如nginx的limit_conn模块,用来限制瞬时并发连接数)、限制时间窗口内的平均速率(nginx的limit_req模块,用来限制每秒的平均速率);另外还可以根据网络连接数、网络流量、cpu或内存负载等来限流。1.限流算法最简单粗暴的

nginx php403错误怎么解决nginx php403错误怎么解决Nov 23, 2022 am 09:59 AM

nginx php403错误的解决办法:1、修改文件权限或开启selinux;2、修改php-fpm.conf,加入需要的文件扩展名;3、修改php.ini内容为“cgi.fix_pathinfo = 0”;4、重启php-fpm即可。

nginx+rsync+inotify怎么配置实现负载均衡nginx+rsync+inotify怎么配置实现负载均衡May 11, 2023 pm 03:37 PM

实验环境前端nginx:ip192.168.6.242,对后端的wordpress网站做反向代理实现复杂均衡后端nginx:ip192.168.6.36,192.168.6.205都部署wordpress,并使用相同的数据库1、在后端的两个wordpress上配置rsync+inotify,两服务器都开启rsync服务,并且通过inotify分别向对方同步数据下面配置192.168.6.205这台服务器vim/etc/rsyncd.confuid=nginxgid=nginxport=873ho

如何解决跨域?常见解决方案浅析如何解决跨域?常见解决方案浅析Apr 25, 2023 pm 07:57 PM

跨域是开发中经常会遇到的一个场景,也是面试中经常会讨论的一个问题。掌握常见的跨域解决方案及其背后的原理,不仅可以提高我们的开发效率,还能在面试中表现的更加

Linux系统下如何为Nginx安装多版本PHPLinux系统下如何为Nginx安装多版本PHPMay 11, 2023 pm 07:34 PM

linux版本:64位centos6.4nginx版本:nginx1.8.0php版本:php5.5.28&php5.4.44注意假如php5.5是主版本已经安装在/usr/local/php目录下,那么再安装其他版本的php再指定不同安装目录即可。安装php#wgethttp://cn2.php.net/get/php-5.4.44.tar.gz/from/this/mirror#tarzxvfphp-5.4.44.tar.gz#cdphp-5.4.44#./configure--pr

nginx部署react刷新404怎么办nginx部署react刷新404怎么办Jan 03, 2023 pm 01:41 PM

nginx部署react刷新404的解决办法:1、修改Nginx配置为“server {listen 80;server_name https://www.xxx.com;location / {root xxx;index index.html index.htm;...}”;2、刷新路由,按当前路径去nginx加载页面即可。

nginx怎么禁止访问phpnginx怎么禁止访问phpNov 22, 2022 am 09:52 AM

nginx禁止访问php的方法:1、配置nginx,禁止解析指定目录下的指定程序;2、将“location ~^/images/.*\.(php|php5|sh|pl|py)${deny all...}”语句放置在server标签内即可。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구