반응형
하나, 왜 동선분리를 하는가
자원을 분리하고 불필요한 요청 소비를 줄이며 요청 지연 시간을 줄입니다.
비고: 여기서는 nginx가 정적 자원을 처리하고 apache가 동적 자원을 처리합니다.
장면 분석:
1, 분리되지 않은 장면의 단계
(1) 클라이언트에서 미들웨어로 url 요청(예: nginx, apache)
(2) 미들웨어는 url에 따라 해당 디렉토리를 요청하며, 프로그램 프레임워크
(3) 프로그램 프레임워크 실행 프로그램 논리
(4) 프로그램 논리 요청 해당 데이터 리소스
(5) 데이터 리소스를 클라이언트에 반환
참고: 사실 정적 리소스는 동적 요청을 거치지 않고 클라이언트에 직접 미들웨어를 반환하면 됩니다.그러니까 1단계와 5단계만 하면 되는 거예요
설정 파일 표시:
upstream php_api{
#에이전트가 로컬 apache 서버에 요청하여 움직임 분리를 수행합니다(여기서 apache 기본 포트를 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;
}
마지막으로, 위의 프로필은 역방향 에이전트 및 로드 균형이 어떻게 달성되는지를 설명하기 위한 것일 뿐 실제 프로젝트를 결합하지 않는다는 점에 유의해야 합니다
반응형
'개발 꿀팁 > PHP' 카테고리의 다른 글
CrossPHP 프레임워크의 일반적인 작동 방식 (0) | 2022.10.31 |
---|---|
PHP 프로젝트에서 캐시된 다양한 응용 프로그램 구현 (0) | 2022.10.28 |
crossphp 프레임워크에서, 템플릿에 다른 템플릿을 로드합니다 (0) | 2022.10.28 |
php는 3단계 분류 데이터를 처리한다 (0) | 2022.10.27 |
php 인쇄 포맷 (0) | 2022.10.27 |