개발 꿀팁/PHP

Nginx가 Upstream을 사용하여 움직임 분리하기

Jammie 2022. 7. 27. 14:49
반응형

1. 왜 동정을 분리해야 하는가

자원을 분리하여 불필요한 청을 줄이다소모를 요구하며, 요청 지연 시간을 줄인다.

비고: 나 여기, nginx야.정적 자원을 정리하고, 아파치는 동적 자원을 처리한다.

장면 분석:

1, 분리되지 않은 이전 장면

(1) 클라이언트에서 url 요청 중스페이서(예: nginx, apache)

(2) 미들웨어는 url 요청에 따라해당하는 디렉터리, 프로그램 프레임워크

(3) 프로그램 프레임워크 실행 프로그램 논리

(4) 프로그램 로직 요구 해당 데이터자원

(5)데이터 자원을 고객에게 반환끝

비고: 사실, 정적 자원은 필요하지 않습니다.동적 요청을 거쳐 직접 미들웨어를 클라이언트에 반환하면 된다.그러니까 1단계랑 5단계만 하면 되는 거예요





설정 파일 보기:

upstream php_api{
    #에이전트가 로컬 APACH 서버에 동작 분리를 요청함 (APACH 기본 포트를 81로 변경함)
    server 127.0.0.1:81;
}
server {
    listen       80;
    server_name  www.xiaobudiu.top;
 
    access_log  /etc/nginx/logs/access/www.xiabudiu.top.access.log  main;
    root /data/www;
 
    location ~ \.php$ {
        #만약 사이트에서 방문한 url 접미사가 .php라면, 에이전트는 apache를 사용하여 해석한다
        proxy_pass http://php_api;
        index  index.html index.htm;
    }
 
    #정적 자원을 요청하면 기본적으로 nginx를 사용합니다
    location ~ \.(jpg|png|gif)$ {
        expires 1h;
        gzip on;
    }
 
    location /{
        index  index.html index.htm;
    }
 
 
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504 404 403  /404.html;
    location = /404.html {
        root   /data/errorPage;
    }
 
 
    location ~ /\.ht {
        deny  all;
    }
}

또는 다음과 같다

upstream image {
    server  192.168.0.3:80;
    server  192.168.0.4:80;
}
 
upstream php {
    server  192.168.0.5:80;
    server  192.168.0.6:80;
}
 
server {
    listen       80;
    server_name  www.xiaobudiu.top;
 
    access_log  /etc/nginx/logs/access/www.xiabudiu.top.access.log  main;
 
    location  /{
        #만약 uri 접미사가 .php 또는 그림 접미사가 아니라면 로컬 서버에서 처리하십시오
        root data/www;
        index  index.php index.html;
    }
 
    location ~* \.php$ {
        #.php가 끝나는 경우, 역방향 에이전트가 Upstream php 그룹에 폴링합니다
        proxy_pass  http://php;
    }
 
    location ~* "\.(.jpg|png|jpeg|gif)" {
        #.jpg,.png,.jpeg,.gif가 끝나면 역방향 에이전트가 upstream image 그룹으로 가서 폴링합니다
        proxy_pass http://image;
    }
 
    # redirect server error pages to the static page /404.html
    error_page   500 502 503 504 404 403  /404.html;
    location = /404.html {
        root   /data/errorPage;
    }
 
    location ~ /\.ht {
        deny  all;
    }
 
}

 비고: 이것은 하위 프로필에서 정의됩니다. 예를 들어 /etc/nginx/conf.d/ www.xiaobudiu.top.conf 파일을 편집했습니다.



물론 nginx는 에이전트에 대한 일정한 요구가 있기 때문에 nginx.conf에서도 다음과 같이 일정한 정의를 내려야 한다.

nginx.conf

user  nginx;
worker_processes  1;
worker_rlimit_nofile 65536;
 
error_log  /etc/nginx/logs/error/error.log warn;
pid        /var/run/nginx.pid;
 
 
events {
    worker_connections  1024;
    multi_accept on;
    use epoll;
}
 
 
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    access_log  /etc/nginx/logs/access/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    keepalive_timeout  65;
    client_max_body_size 20m;
 
    gzip  on;
    gzip_proxied any;
    gzip_comp_level 3;
    gzip_min_length 1k;
    gzip_buffers 16 32k;
    gzip_http_version 1.0;
    gzip_types text/plain text/css application/json application/xml+rss text/javascript image/jpeg image/gif image/png;
 
    fastcgi_buffers 256 16k;
    fastcgi_buffer_size 128k;
    fastcgi_connect_timeout 3s;
    fastcgi_send_timeout 120s;
    fastcgi_read_timeout 120s;
    reset_timedout_connection on;
    server_names_hash_bucket_size 100;
 
    include /etc/nginx/conf.d/*.conf;
 
}

마지막으로, 상기 프로파일은 역방향 에이전트와 로드 밸런스가 어떻게 실현되는지를 설명하기 위한 것일 뿐 실제 프로젝트와 결합되어 있지 않다

반응형