Apacheのリバースプロキシとして動作するnginxがあります。ここで、別のディレクトリからファイルを提供する新しいサブドメインを追加する必要がありますが、同時に、デフォルトのホストにあるすべてのlocationおよびproxy_passディレクティブをサブドメインにも適用する必要があります。
デフォルトのホストから新しいサブドメインにルールをコピーすると機能しますが、サブドメインがルールを継承する方法はありますか?以下は設定例です
server {
listen 80;
server_name www.somesite.com;
access_log logs/access.log;
error_log logs/error.log error;
location /mvc {
proxy_pass http://localhost:8080/mvc;
}
location /assets {
alias /var/www/html/assets;
expires max;
}
... a lot more locations
}
server {
listen 80;
server_name subdomain.somesite.com;
location / {
root /var/www/some_dir;
index index.html index.htm;
}
}
ありがとう
共通部分を別の構成ファイルに移動し、両方のサーバーコンテキストからinclude
を移動できます。これは動作するはずです:
server {
listen 80;
server_name server1.example;
...
include /etc/nginx/include.d/your-common-stuff.conf;
}
server {
listen 80;
server_name another-one.example;
...
include /etc/nginx/include.d/your-common-stuff.conf;
}
編集:これは、実行中のサーバーから実際にコピーされた例です。 /etc/nginx/sites-enabled
(Ubuntu/Debianのnginxの通常のもの)で基本的なサーバー設定を構成します。たとえば、メインサーバーbunkus.org
の構成ファイルは/etc/nginx/sites-enabled
で、次のようになります。
server {
listen 80 default_server;
listen [2a01:4f8:120:3105::101:1]:80 default_server;
include /etc/nginx/include.d/all-common;
include /etc/nginx/include.d/bunkus.org-common;
include /etc/nginx/include.d/bunkus.org-80;
}
server {
listen 443 default_server;
listen [2a01:4f8:120:3105::101:1]:443 default_server;
include /etc/nginx/include.d/all-common;
include /etc/nginx/include.d/ssl-common;
include /etc/nginx/include.d/bunkus.org-common;
include /etc/nginx/include.d/bunkus.org-443;
}
例として、両方のserver
コンテキストからインクルードされた/etc/nginx/include.d/all-common
ファイルがあります。
index index.html index.htm index.php .dirindex.php;
try_files $uri $uri/ =404;
location ~ /\.ht {
deny all;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location ~ /(README|ChangeLog)$ {
types { }
default_type text/plain;
}
別のタイプの解決策は、 ansibleからJinja2テンプレートを介してnginx confファイルを自動生成する です。これの利点は、クラウド環境への展開が簡単であり、複数の開発マシンで簡単に複製できることです。