Nginxのlocation以下の設定を共有化する
例
Nginx 特定のlocationにIP制限をかける。例えば以下の状態から/admin-api/ 以下のアクセスにIP制限をかけたいとする
# /etc/nginx/sites-enabled/www.conf
http {
server {
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
proxy_pass http://big_server_com;
}
}
}
location以下の共通化したい内容を別のファイルに記載
# /etc/nginx/shared.conf
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
proxy_pass http://big_server_com;
# /etc/nginx/sites-enabled/www.conf
http {
server {
location ~ ^/admin-api/ {
# 以下に個別の設定を記載する
deny all;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
include /etc/nginx/shared.conf
}
location / {
include /etc/nginx/shared.conf
}
}
}
ChatGPT3.5に聞いてみた
-
Q. nginxでlocation以下の設定を共有化する方法を教えて
-
A. nginxにはlocationブロックの共有化に便利な機能があります。具体的には、includeディレクティブを使用して、locationブロックの共通部分を別のファイルに切り出し、それを複数のlocationブロックで共有することができます。
以下は、例としてlocation /app1/とlocation /app2/の設定を共有する方法です。
まず、共通の設定を含むファイルを作成します。例えば、/etc/nginx/conf.d/common.confという名前のファイルを作成し、以下のように設定します。
bash
location / {
# 共通の設定
...
}
location /static/ {
# 共通の設定
...
}
次に、/etc/nginx/conf.d/app1.confファイルと/etc/nginx/conf.d/app2.confファイルを作成し、それぞれ以下のように設定します。
bash
server {
...
location /app1/ {
include /etc/nginx/conf.d/common.conf;
# app1の設定
...
}
}
server {
...
location /app2/ {
include /etc/nginx/conf.d/common.conf;
# app2の設定
...
}
}
こうすることで、/etc/nginx/conf.d/common.confに書かれた共通の設定が、/app1/と/app2/の両方のlocationブロックで共有されるようになります。
ChatGPT感想
うーん微妙に違うんだよな。locationブロックが共有化されるのは分かってたんでheaderの設定だけ書いても動作するのかどうか知りたかったんだけど「location以下の内容を書いても共有化できる?」って聞いてもその真偽を確かめるには実際にコード書くかドキュメント読むしか無いよね。 実際に試せる環境ならChatGPTが出力したコード試すほうが早い、そうじゃないならドキュメント読むしか無い。
© nomoa.devRSS