초보 자 분포 식 - Nginx 설정 을 동적 으로 수정 하 는 아이디어
Nginx 인 자 를 동적 으로 설정 하 는 방법
Nginx 의 매개 변수 가 많 고 설정 이 유연 하지 않 기 때문에 완벽 한 자동화 설정 을 달성 하 는 것 은 매우 도 전적인 일이 다. 이 도 구 는 완벽 한 자동화 조정 파 라미 터 를 만 들 지 못 한다.현재 자동화 수정 을 지원 하 는 매개 변 수 는 다음 과 같 습 니 다.
자동화 수정 파 라 메 터 를 어떻게 실현 하 는 지 소개 한다.
예비 지식
더 잘 이해 하기 위해 서 는 간단 한 예비 지식 이 필요 하 다.먼저 Nginx 의 프로필 형식 을 알 아야 합 니 다. 전형 적 인 Nginx 프로필 (여기 Nginx 가 7 층 역방향 부하 로 사용 된다 고 가정) 은 아래 의 모습 으로 보 입 니 다.
# nginx http://nginx.org/en/docs/example.html
1 user www www;
2
3 worker_processes 2;
4
5 pid /var/run/nginx.pid;
6
7 # [ debug | info | notice | warn | error | crit ]
8
9 error_log /var/log/nginx.error_log info;
10
11 events {
12 worker_connections 2000;
13
14 # use [ kqueue | epoll | /dev/poll | select | poll ];
15 use kqueue;
16 }
17
18 http {
19
20 include conf/mime.types;
21 default_type application/octet-stream;
22
23
24 log_format main '$remote_addr - $remote_user [$time_local] '
25 '"$request" $status $bytes_sent '
26 '"$http_referer" "$http_user_agent" '
27 '"$gzip_ratio"';
28
29 log_format download '$remote_addr - $remote_user [$time_local] '
30 '"$request" $status $bytes_sent '
31 '"$http_referer" "$http_user_agent" '
32 '"$http_range" "$sent_http_content_range"';
33
34 client_header_timeout 3m;
35 client_body_timeout 3m;
36 send_timeout 3m;
37
38 client_header_buffer_size 1k;
39 large_client_header_buffers 4 4k;
40
41 gzip on;
42 gzip_min_length 1100;
43 gzip_buffers 4 8k;
44 gzip_types text/plain;
45
46 output_buffers 1 32k;
47 postpone_output 1460;
48
49 sendfile on;
50 tcp_nopush on;
51 tcp_nodelay on;
52 send_lowat 12000;
53
54 keepalive_timeout 75 20;
55
56 #lingering_time 30;
57 #lingering_timeout 10;
58 #reset_timedout_connection on;
59
60
61 server {
62 listen one.example.com;
63 server_name one.example.com www.one.example.com;
64
65 access_log /var/log/nginx.access_log main;
66
67 location / {
68 proxy_pass http://127.0.0.1/;
69 proxy_redirect off;
70
71 proxy_set_header Host $host;
72 proxy_set_header X-Real-IP $remote_addr;
73 #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
74
75 client_max_body_size 10m;
76 client_body_buffer_size 128k;
77
78 client_body_temp_path /var/nginx/client_body_temp;
79
80 proxy_connect_timeout 70;
81 proxy_send_timeout 90;
82 proxy_read_timeout 90;
83 proxy_send_lowat 12000;
84
85 proxy_buffer_size 4k;
86 proxy_buffers 4 32k;
87 proxy_busy_buffers_size 64k;
88 proxy_temp_file_write_size 64k;
89
90 proxy_temp_path /var/nginx/proxy_temp;
91
92 charset koi8-r;
93 }
94
95 error_page 404 /404.html;
96
97 location = /404.html {
98 root /spool/www;
99 }
100
101 location /old_stuff/ {
102 rewrite ^/old_stuff/(.*)$ /new_stuff/$1 permanent;
103 }
104
105 location /download/ {
106
107 valid_referers none blocked server_names *.example.com;
108
109 if ($invalid_referer) {
110 #rewrite ^/ http://www.example.com/;
111 return 403;
112 }
113
114 #rewrite_log on;
115
116 # rewrite /download/*/mp3/*.any_ext to /download/*/mp3/*.mp3
117 rewrite ^/(download/.*)/mp3/(.*)\..*$
118 /$1/mp3/$2.mp3 break;
119
120 root /spool/www;
121 #autoindex on;
122 access_log /var/log/nginx-download.access_log download;
123 }
124
125 location ~* \.(jpg|jpeg|gif)$ {
126 root /spool/www;
127 access_log off;
128 expires 30d;
129 }
130 }
131 }
18 줄 에서 131 줄 까지
Nginx2Svg
설정 내용 에 속 합 니 다. 이 부분 매개 변수 에서 61 줄 에서 130 줄 까지 Nginx2Svg
설정 내용 에 속 합 니 다. (하나의 server 는 하나의 가상 호스트 에 대응 합 니 다) http
매개 변 수 는 server
매개 변수의 부분 집합 에 속 합 니 다. 같은 매개 변수 가 나타 날 때 server
우선 순위 가 http
보다 높 습 니 다.작용 역 에 따라 비 교 를 하면 server
은 전역 변수 이 고 http
는 국부 변수 이다.그래서 18 줄 에서 60 줄 은 전체 변수 에 속 하고 61 줄 에서 130 줄 은 부분 변수 에 속한다.뒤의 조작 을 간소화 하기 위해 우 리 는
http
와 server
간 의 포함 관 계 를 간소화 할 수 있다. 다음 과 같다. 1 user nginx;
2 worker_processes 1;
3
4 error_log /var/log/nginx/error.log warn;
5 pid /var/run/nginx.pid;
6
7
8 events {
9 worker_connections 1024;
10 }
11
12
13 http {
15 include /etc/nginx/mime.types;
16 default_type application/octet-stream;
17
18 log_format main '$remote_addr - $remote_user [$time_local] '
19 '"$request" $status $bytes_sent '
20 '"$http_referer" "$http_user_agent" '
21 '"$gzip_ratio"';
22
23 log_format download '$remote_addr - $remote_user [$time_local] '
24 '"$request" $status $bytes_sent '
25 '"$http_referer" "$http_user_agent" '
26 '"$http_range" "$sent_http_content_range"';
27
28 access_log /var/log/nginx/access.log main;
29
30 sendfile on;
31
32 keepalive_timeout 65;
33
34
35 server {
36 listen 80 default_server;
37 server_name _;
38
39 location /status {
40 vhost_traffic_status_display;
41 vhost_traffic_status_display_format html;
42 }
43 }
44
45 include /etc/nginx/conf.d/*.conf;
46 }
http
을 통 해 다른 server 프로필 을 도입 하고 위의 내용 은 server
전역 기본 프로필 로 사용 할 수 있 으 며 거의 수정 되 지 않 습 니 다.앞으로 우리 가 동적 으로 수정 해 야 할 프로필 은 include
이 부분 입 니 다.설정 규칙
자동화 배치 의 목 표를 달성 하려 면 규칙 을 설정 해 야 한다.다음은 자동 화 를 만족 시 키 기 위 한 규칙 입 니 다.
해석 규칙
상기 두 가지 규칙 을 만족 시 키 는 전제 에서 우 리 는 Nginx 매개 변수의 자동화 설정 을 어떻게 실현 하 는 지 살 펴 보 자.먼저 nginx 자동화 설정 을 실현 하 는 난점 이 어디 에 있 습 니까?나의 사용 경험 을 보면 어 려 운 점 은 다음 과 같은 세 가지 에 있다.
nginx.conf
의미 에 속 합 니 다. nginx 는 설정 파일 의 내용 과 형식 을 명 확 히 했 지만 설정 에 있어 서 임의로 조합 할 수 있 습 니 다 (nginx - t 또는 reload 를 실행 할 때 만 진정 으로 검증 할 수 있 습 니 다).따라서 프로필 은 최소 문턱 /etc/nginx/conf.d/*.conf
만 규정 하고 엄밀 한 설정 형식 을 규정 하지 않 아 의미 에 맞 으 면 모두 검증 에 성공 했다.이 점 은 사용자 의 눈 에는 매우 유연 한 장점 이지 만 자동화 측면 에서 볼 때 매우 큰 통 증 이다. 왜냐하면 통 일 된 해석 형식 을 찾 아 의 미 를 이해 하지 못 하기 때문이다.상기 세 문제 의 답 을 찾 았 을 때 대체적으로 자동화 배치 의 요 구 를 만족 시 킬 수 있 었 다.
우선 첫 번 째 문 제 를 살 펴 보 자.
nginx 설정 이 원활 해서 nginx 설정 파일 을 정면으로 해석 하 는 것 이 어 려 운 일이 라면 이 문 제 를 다른 각도 로 이해 해 볼 수 있 습 니 다.만약 변화 가 많아 서 해석 하기 어렵다 면, 그것 을 변화 시 키 지 마라
구체 적 으로 어떻게 이해 할 까요?nginx 는 의 미 를 통 해 검 증 된 것 이다. 즉, nginx 자체 가
에 민감 하지 않다 는 것 이다.그래서 우 리 는 모든 프로필 의 설정 형식 을 미리 정의 할 수 있 습 니 다. 다음 과 같 습 니 다. 1
2
3 upstream 5d148ba37f325500011770af {
4 server xxxxx ;
5 }
6
7
8 server{
9
10 server_name web1.example.com;
11
12
13
14
15 location /server1 {
16 proxy_pass http://5d148ba37f325500011770af;
17 proxy_set_header X-Real-IP $remote_addr;
18 proxy_set_header Host $host;
19 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
20 proxy_next_upstream error timeout http_500 http_502 http_503 http_504 non_idempotent;
21
22
23
24 }
25
26 }
27
모든 프로필 은 다음 과 같이 설정 구 조 를 규정 합 니 다.
모두
이전에 통일 적 으로 배치 upstream
server
이전 server_name
각 location
첫 줄 모든 프로필 이 상기 세 가지 조건 을 만족 시 킬 때 자동화 해석 프로그램 은 설 정 된 규칙 에 따라 모든 의 미 를 해석 하고 이해 하려 고 시도 할 수 있다.
파일 만 분석 하기 에는 부족 합 니 다.
proxy_pass
할 수 있어 야 합 니 다.다시 위의 설정 내용 으로 돌아 가면 안의 변 수 는 세 부분 이 있 고 위 에서 아래로 순서대로 다음 과 같다.
+-------------+
| server_name |
| domain1 |
| domain2 | +-----------------+ +-----------------+
| domain3 |---------------> | location1 |--------------> | upstream1 |
| ....... | +-----------------+ +-----------------+
| domainN |
+-------------+
+-----------------+ +-----------------+
| location2 |--------------> | upstream2 |
+-----------------+ +-----------------+
+-----------------+ +-----------------+
| locationN |--------------> | upstreamN |
+-----------------+ +-----------------+
같은 그룹의
location
은 모든
데 이 터 를 공유 하고, 각각 server_name
은 location
을 통 해 특정 location
(다 를 수도 있 고, 같은 upstream 일 수도 있다) 을 가리킨다.위의 그림 에서 알 수 있 듯 이
proxy_pass
와 upstream
는 한 작용 역 에서 (같은 server_name
에서), location
는 밖으로 유리 되 어 있다.세 문제 중 servername 은
{}
을 통 해 정확 한 포 지 셔 닝 을 할 수 있 고 upstream
도 정확 한 포 지 셔 닝 을 할 수 있 습 니 다. 이때 server_name
를 통 해 location
포 지 셔 닝 을 어떻게 하 는 지 현재 의 난점 이 되 었 습 니 다.실제 사용 과정 에서 저 는 추가
location
를 통 해 이 문 제 를 해결 합 니 다. 구체 적 으로 보면 한 조 proxy_pass
의 보조 포 지 셔 닝 데 이 터 를 추가 하 는 것 입 니 다. 예 를 들 어 다음 그림 의 데 이 터 를 추가 하 는 것 입 니 다. 1
2 ### [5d148ba37f325500011770af]-[/]-[upstream]-[start]
3 upstream 5d148ba37f325500011770af {
4 server xxxxx ;
5 }
6 ### [5d148ba37f325500011770af]-[/]-[upstream]-[end]
7
8 server{
9
10 server_name web1.example.com;
11
12
13
14
15 location /server1 {
16 proxy_pass http://5d148ba37f325500011770af;
17 proxy_set_header X-Real-IP $remote_addr;
18 proxy_set_header Host $host;
19 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
20 proxy_next_upstream error timeout http_500 http_502 http_503 http_504 non_idempotent;
21
22
23
24 }
25
26 }
27
두 번 째 줄 과 여섯 번 째 줄 은 추 가 된 것 이다
upstream
.닻 점 데이터 가 만족 해 야 할 조건 은:
데 이 터 를 디자인 했 는데 그 형식 은 다음 과 같다. ### [5d148ba37f325500011770af]-[/]-[upstream]-[start]
----------------------------------------------------
### [24 ]-[/]-[upstream]-[ / ]
① ② ③ ④
① #
② ,upstream proxy_pass , , 24
③ ,
④ start upstream , end upstream 。
따라서 완전한 자동화 설정 절 차 는 다음 과 같다.
// web1.example.com /server1
if web1.example.com.conf
if server1 location
proxy_pass, 24
if ### [xxxx]-[/]-[upstream]-[start]
, ip ,
else
, ,
else
// location , location upstream
location
upstream
else
// ,
web1.example.com.conf,
맞 춤 형 지원
위의 해석 규칙 을 보면 개성 화 된 지원 을 지원 하려 면 의 미 를 이해 할 때
upstream
, 즉 필요 한 데이터 만 분석 하면 되 고 다른 데 이 터 는 그대로 복사 해 야 한다.예 를 들 어 사용자 가
에 맞 춤 형 매개 변수 (만족
를 추가 하면 분석
만 하면 되 고 후속 데 이 터 는 그대로 복사 하여 변경 하지 않 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.