openresty postgresql 모듈 추가

4158 단어 nginx
1. postgresql - devel 설치      
yum install  postgresql-devel

2. nginx conf 에 location 설정:
location /postgres {
	    internal;

	    default_type text/html;
	    set_by_lua_block $query_sql {return ngx.unescape_uri(ngx.var.arg_sql)}
	    
	    postgres_pass   pg_server;
	    rds_json          on;
	    rds_json_buffer_size 16k;
	    postgres_query  $query_sql;
	    postgres_connect_timeout 1s;
	    postgres_result_timeout 2s;
	}

 
  • internal 이 명령 이 지정 한 location 은 내부 요청 을 처리 하 는 데 만 사용 할 수 있 습 니 다. 그렇지 않 으 면 404 로 돌아 갑 니 다.
  • set_by_lua 이 단락 에 내 장 된 Lua 코드 는 $query 를 계산 하 는 데 사 용 됩 니 다.sql 변수의 값, 즉 후속 명령 을 통 해 postgresquery 에서 PostgreSQL 로 처 리 된 SQL 문 구 를 보 냅 니 다.여기에 GET 가 요청 한 query 인 자 를 SQL 구문 으로 입력 합 니 다.
  • postgres_pass 이 명령 은 배경 서 비 스 를 제공 하 는 PostgreSQL 데이터베이스 의 upstream 블록 을 지정 할 수 있 습 니 다.
  • rds_json 이 명령 은 ngxrds_json 에서 제공 하 는, 지정 ngxrds_json 의 output 필터 의 스위치 상태 입 니 다. 모듈 역할 은 rds 형식 데 이 터 를 json 형식 으로 변환 하 는 output filter 입 니 다.이 지령 이 여기 나타 나 면 ngxrds_json 모듈 도움말 ngxpostgres 모듈 은 모듈 출력 데 이 터 를 json 형식의 데이터 로 변환 합 니 다.
  • rds_json_buffer_size 이 명령 은 ngx 를 지정 합 니 다.rds_json 은 모든 연결 데이터 변환 에 사용 되 는 메모리 크기 입 니 다. 기본 값 은 4 / 8k 입 니 다. 이 매개 변 수 를 적당 하 게 늘 리 면 CPU 소 모 를 줄 일 수 있 습 니 다.
  • postgres_query 는 SQL 쿼 리 문 구 를 지정 합 니 다. 쿼 리 문 구 는 PostgreSQL 데이터베이스 에 직접 전 송 됩 니 다.
  • postgres_connect_timeout 연결 시간 초과 설정.
  • postgres_result_timeout 설정 결 과 는 시간 초과 로 되 돌아 갑 니 다.

  •  3. upstream 설정
    upstream pg_server {
        postgres_server  192.168.0.103:5432 dbname=fame
                user=postgres password=root;
        postgres_keepalive max=800 mode=single overflow=reject;
    }

     
  • postgres_server 이 명령 은 반드시 가 져 가 야 하지만 여러 개 를 설정 할 수 있 습 니 다. 서버 연결 파 라 메 터 를 설정 할 수 있 고 여러 개의 매개 변수 로 분해 할 수 있 습 니 다.
  • 바로 뒤 를 따 르 는 것 은 서버 의 IP: Port
  • 일 것 이다.
  • dbname 은 서버 가 연결 할 PostgreSQL 의 데이터베이스 이름 입 니 다.
  • user 는 PostgreSQL 서버 를 연결 하 는 데 사용 되 는 계 정 이름 입 니 다.
  • password 는 계 정 이름 에 해당 하 는 비밀번호 입 니 다.

  • postgres_keepalive 이 명령 은 긴 연결 풀 파 라 메 터 를 설정 하 는 데 사 용 됩 니 다. 긴 연결 풀 은 통신 효율 을 향상 시 키 고 몇 가지 매개 변수 로 분해 할 수 있 습 니 다.
  • max 는 작업 프로 세 스 가 유지 할 수 있 는 연결 탱크 의 최대 연결 수량 입 니 다.
  • mode 는 백 엔 드 매 칭 모드 로 potgresserver 는 여러 개 를 설정 할 때 역할 을 합 니 다. single 과 multi 두 가지 값 이 있 습 니 다. 보통 single 을 사용 하면 됩 니 다.
  • overflow 는 긴 연결 수량 이 max 에 도착 한 후의 처리 방안 으로 ignore 와 reject 두 가지 값 이 있 습 니 다. 
  • ignore 는 새로운 연결 과 데이터 베 이 스 를 만 들 수 있 지만 통신 이 완료 되면 바로 이 연결 을 닫 습 니 다.
  • reject 접근 거부 및 503 서비스 되 돌아 가기


  •  
    4. lua 파일 중:
    -- postgres     ,  JSON     
    function queryDataPostgres()
    	local res = ngx.location.capture('/postgres',
                { args = {sql = "select user_id,user_name from fame_user where 1=1 limit 5 offset 0 " } }
    	)
    	local status = res.status
    	--        ,  json         
    	local body = readJson(res.body)
    	if status == 200 then
    		--          , JSON     
    		return respData2Client(body)
    	else
    		return callerror()
    	end
    

    이상 전단 요청 을 받 은 후 postgres 모듈 로 전송 요청 을 조회 할 수 있 습 니 다. 조 회 된 데 이 터 는 JSON 형식 입 니 다.
    5. nginx 에서 api 입구 설정:
    listen       80;
    	server_name  192.168.58.128;#    
    	charset utf-8;
    
    	location /fameapi {
    	    
    	    default_type application/json;
    	    access_by_lua_file ../lua/hight_limit_speed.lua; # lua  
    	    proxy_buffer_size 64k;
                proxy_buffers   32 32k;
                proxy_busy_buffers_size 128k;         
                proxy_pass     http://fameapi; #    
                proxy_set_header   X-Real-IP $remote_addr;
          	    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
          	    proxy_set_header    Host $host;
                proxy_pass_header    User-Agent;
          	    client_max_body_size 100M;
    	    proxy_connect_timeout 60;#nginx            (      )
    	    proxy_send_timeout 60;#           (      )
    	    proxy_read_timeout 60;#     ,         (      )
    	}

     
    참조 원본:https://moonbingbing.gitbooks.io/openresty-best-practices/content/postgres/how_to_use.html 

    좋은 웹페이지 즐겨찾기