Nginx 시리즈 6: 중요 모듈

10968 단어
nginx 모듈 은 두 가지 로 나 뉘 는데 정부 와 제3자 입 니 다. 우 리 는 명령 nginx - V 를 통 해 nginx 가 설 치 된 모듈 을 봅 니 다!
[root@localhost ~]# nginx -V
nginx version: nginx/1.15.9
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
 
  
Nginx模块名称 模块作用
ngx_http_access_module 四层基于IP的访问控制,可以通过匹配客户端源IP地址进行限制
ngx_http_auth_basic_module 状态页,使用basic机制进行用户认证,在编译安装nginx的时候需要添加编译参数--withhttp_stub_status_module,否则配置完成之后监测会是提示语法错误
ngx_http_stub_status_module 状态统计模块
ngx_http_gzip_module 文件的压缩功能
ngx_http_gzip_static_module 静态压缩模块
ngx_http_ssl_module nginx 的https 功能
ngx_http_rewrite_module 重定向模块,解析和处理rewrite请求
ngx_http_referer_module 防盗链功能,基于访问安全考虑
ngx_http_proxy_module 将客户端的请求以http协议转发至指定服务器进行处理
ngx_stream_proxy_module tcp负载,将客户端的请求以tcp协议转发至指定服务器处理
ngx_http_fastcgi_module 将客户端对php的请求以fastcgi协议转发至指定服务器助理
ngx_http_uwsgi_module 将客户端对Python的请求以uwsgi协议转发至指定服务器处理
ngx_http_headers_module 可以实现对头部报文添加指定的key与值
ngx_http_upstream_module 负载均衡模块,提供服务器分组转发、权重分配、状态监测、调度算法等高级功能
ngx_stream_upstream_module 后端服务器分组转发、权重分配、状态监测、调度算法等高级功能
ngx_http_fastcgi_module 实现通过fastcgi协议将指定的客户端请求转发至php-fpm处理
ngx_http_flv_module 为flv伪流媒体服务端提供支持
 

nginx_substitutions_filter 响应过滤替换

这个是比较冷门但异常强大的模块,它不是重定向,也不是请求过滤,而是对http响应进行魔术般的过滤替换。在响应体上执行正则表达式和固定字符串替换的过滤模块。这个模块与NGINX的本机替换模块非常不同。它扫描输出链缓冲区并逐行匹配字符串。
一个真实的例子:
    location / {
            proxy_pass  https://198.198.20.188:8443;
            proxy_redirect default;
        subs_filter_types text/css text/plain text/xml text/javascript application/javascript application/json application/xml;
        subs_filter 'https://198.198.20.188:8443' 'https://nytalktest.gdnybank.com:6017' gir;
        subs_filter '198.198.20.188:8443' 'nytalktest.gdnybank.com:6017' gir;
        subs_filter 'https%3a%2f%2f198.198.20.188%3a8443' 'https%3a%2f%2fnytalktest.gdnybank.com%3a6017' gir;
        proxy_set_header Accept-Encoding "";
        }

설치:
git clone git://github.com/yaoweibin/ngx_http_substitutions_filter_module.git
./configure --add-module=/path/to/module

nginx-push-stream-module
Push Stream Module 은 http 기술 을 사용 하여 연결 파 이 프 를 실현 합 니 다. 프로젝트 에 서 는 주로 실시 간 메시지 의 푸 시, 예 를 들 어 채 팅 기능 에 사 용 됩 니 다.
Push Stream Module 은 주로 pub / sub 모드 로 긴 연결 을 관리 합 니 다. 사용 자 는 연결 채널 을 신청 할 수 있 고 채널 은 이 채널 을 구독 할 수 있 습 니 다. 메시지 푸 시 자 는 연결 채널 에 메 시 지 를 보 낼 수 있 습 니 다. 그러면 이 채널 을 구독 하 는 모든 사용자 가 이 메 시 지 를 받 을 수 있 습 니 다.설정:
# add the push_stream_shared_memory_size to your http context
    http {
       push_stream_shared_memory_size 32M;

        # define publisher and subscriber endpoints in your server context
        server {
           location /channels-stats {
                # activate channels statistics mode for this location
                push_stream_channels_statistics;

                # query string based channel id
                push_stream_channels_path               $arg_id;
            }

            location /pub {
               # activate publisher (admin) mode for this location
               push_stream_publisher admin;

                # query string based channel id
                push_stream_channels_path               $arg_id;
            }

            location ~ /sub/(.*) {
                # activate subscriber (streaming) mode for this location
                push_stream_subscriber;

                # positional channel path
                push_stream_channels_path                   $1;
            }
        }
    }

구독 예 게시
# Subs
    curl -s -v --no-buffer 'http://localhost/sub/my_channel_1'
    curl -s -v --no-buffer 'http://localhost/sub/your_channel_1'
    curl -s -v --no-buffer 'http://localhost/sub/your_channel_2'

    # Pubs
    curl -s -v -X POST 'http://localhost/pub?id=my_channel_1' -d 'Hello World!'
    curl -s -v -X POST 'http://localhost/pub?id=your_channel_1' -d 'Hi everybody!'
    curl -s -v -X POST 'http://localhost/pub?id=your_channel_2' -d 'Goodbye!'

    # Channels Stats for publisher (json format)
    curl -s -v 'http://localhost/pub?id=my_channel_1'

    # All Channels Stats summarized (json format)
    curl -s -v 'http://localhost/channels-stats'

    # All Channels Stats detailed (json format)
    curl -s -v 'http://localhost/channels-stats?id=ALL'

    # Prefixed Channels Stats detailed (json format)
    curl -s -v 'http://localhost/channels-stats?id=your_channel_*'

    # Channels Stats (json format)
    curl -s -v 'http://localhost/channels-stats?id=my_channel_1'

    # Delete Channels
    curl -s -v -X DELETE 'http://localhost/pub?id=my_channel_1'

상세 한 소개:
https://github.com/wandenberg/nginx-push-stream-module
ngx_http_gzip_모듈 모듈
압축 모듈 은 전송 데이터 의 크기 감소 에 유리 하지만 cpu 사용 은 높 아 집 니 다.전 송 된 데 이 터 를 압축 해 야 하기 때문이다.1. gzip on | off;압축 기능 2. gzip 열기 또는 닫 기comp_level level;압축 비 설정, 일반 사용 63. gzipdisable regex …;요청 메시지 의 "User - agent" 가 성공 적 인 요청 과 일치 하 며 압축 하지 않 습 니 다.4. gzip_min_length length;압축 기능 의 응답 메시지 크기 한도 값 사용 하기;어떤 값 보다 크 면 압축 기능 이 시 작 됩 니 다. 5. gzipbuffers number size;압축 기능 을 실현 할 때 설정 한 버퍼 의 수량 과 각 캐 시 구역 의 크기 를 지원 합 니 다.6. gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any …;nginx 는 프 록 시 서버 로 서 프 록 시 서버 에서 보 낸 응답 메 시 지 를 받 은 후 어떤 조건 에서 압축 기능 을 사용 합 니까?
off: 프 록 시 에 대한 요청 은 no - cache, no - store, private 를 사용 하지 않 습 니 다. 프 록 시 서버 에서 받 은 응답 메시지 의 첫 번 째 Cache - Control 값 이 이 세 가지 중 어느 것 이 든 압축 기능 을 사용 합 니 다.gzip_types mime-type …;압축 필 터 는 여기에서 설정 한 MIME 형식의 내용 만 압축 기능 을 사용 합 니 다.예시:
gzip on;
gzip_comp_level 6;
gzip_min_length 64;
gzip_proxied any;
gzip_types text/xml text/css application/javascript;

ngx_http_referer_모듈 모듈
이 모듈 을 기반 으로 도 난 방지 체인 을 만 들 수 있 습 니 다.Refer 는 HTTP 요청 헤더 의 일부분 으로 브 라 우 저 (또는 브 라 우 저 행동 을 모 의) 가 웹 서버 에 요청 을 보 낼 때 헤더 정보 에 Refer 가 포함 되 어 있 습 니 다.예 를 들 어 저 는 www. google. com 에 www. baidu. com 링크 가 있 습 니 다. 그러면 이 www. baidu. com 을 클릭 하면 header 정보 에 있 습 니 다.
Referer=http://www.google.comvalid_referers none | blocked | server_names | string …;refer 의 첫 번 째 합 법 적 인 사용 가능 한 값 을 정의 합 니 다.
none: 메시지 의 첫 번 째 부분 에 referer 첫 번 째 부분 이 없습니다.blocked: 메 시 지 를 요청 하 는 referer 의 첫 번 째 부분 에 값 이 없습니다.server_names: 매개 변 수 는 호스트 이름 이나 호스트 이름 모드 로 값 을 가 질 수 있 습 니 다.arbitrary_string: 직접 문자열 이지 만 * 를 어댑터 로 사용 할 수 있 습 니 다.regular expression: 지정 한 정규 표현 식 모드 에 일치 하 는 문자열;사용 ~ 선두, 예 를 들 어 ~. *. ice. com;설정 예시:
valid_referers none block server_names *.ice.com ; #3     referers

if($invalid_referer) {
return 403; ##  referer        valid_referers   ,     403    
}

더 많은 제3자 모듈
https://www.nginx.com/resources/wiki/modules/

좋은 웹페이지 즐겨찾기