マルチドメインnginxサーバー-> Apache

ご挨拶! 友達のリクエストで記事を投稿します。

残念ながら、彼はまだハブに登録しておらず、招待状を送信するためのカルマはほとんどありません。

機会があり、記事が気に入った場合は、招待状を送信するか、カルマを引き上げて、招待状を送信できるようにします。



したがって、タスク:

マルチドメインWebサーバーの便利な管理を整理します。

システムモデル:linux-> nginx-> apache-> php-> mysql。



以前は、ドメインごとにnginxとapacheの個別の設定がありましたが、

新しいホストを追加するには、少なくとも2つの構成を追加する必要がありました。



仕事は便利に整理されました。 実際、2つのスクリプトがありました。 1はホストをnginxに追加し、もう1つはapacheに追加します。 (バインドするホストを追加するためのスクリプトはまだありますが、これは別の話です)。



しかし、ホストの削除を追加する条件では便利ではありませんでした...時にはnginxを登録するのを忘れていましたが、Apacheでは何かが間違っていました...

次のように決定されました。







次のサーバー構造を入力することは一般的に受け入れられています。



/ホーム/ htdocs / [ドメイン名] / www



そして、この事実を踏まえて、nginxとapache用のユニバーサル設定が開発されました:



nginx

user www-data;

worker_processes 2;



error_log /var/log/nginx/error.log;

pid /var/run/nginx.pid;



events {

worker_connections 1024;

}



http {



include /etc/nginx/mime.types;

default_type application/octet-stream;

access_log /var/log/nginx/access.log;



# log options

log_format main '$host: $remote_addr - $remote_user [$time_local] '

'"$request" $status $bytes_sent '

'"$http_referer" "$http_user_agent" '

'"$gzip_ratio"';



# nginx options

sendfile on;

tcp_nopush on;

tcp_nodelay on;

keepalive_timeout 65 20;



# fastcgi

#fastcgi_intercept_errors on;



server {

listen 80;



location / {

proxy_pass 127.0.0.1:81/;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header Host $host;

}



# Static files location

location ~* \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf)$

{

if (!-d /home/htdocs/$host/www ) {

set $cur_host "default";

access_log '/var/log/nginx/default.log' main;

}

if (-d /home/htdocs/$host/www ) {

set $cur_host $host;

access_log '/var/log/nginx/host_access.log' main;

}

root /home/htdocs/$cur_host/www;

}

# deny access to .htaccess files, if Apache's document root

# concurs with nginx's one

#

location ~ /\.ht {

deny all;

}

}

}









さらに、ホスト障害の場合、データは/ home / htdocs / default / wwwから取得されます



Apacheのユニバーサル仮想ホスト:

NameVirtualHost *

<VirtualHost *>

ServerAdmin support@gmail.com

UseCanonicalName Off



VirtualDocumentRoot /home/htdocs/%-2+/www

php_admin_value auto_prepend_file /home/htdocs/fix_doc_root.php



DirectoryIndex index.php index.html index.htm

<Directory />

Options FollowSymLinks

AllowOverride All







<ディレクトリ/ホーム/ htdocs />

オプションインデックスFollowSymLinks MultiViews

すべてを許可

注文許可、拒否

すべてから許可する





ScriptAlias / cgi-bin / / usr / lib / cgi-bin /

<ディレクトリ "/ usr / lib / cgi-bin">

AllowOverrideなし

オプションExecCGI -MultiViews + SymLinksIfOwnerMatch

注文許可、拒否

すべてから許可





ErrorLog /var/log/apache2/error.log



#有効な値には、debug、info、notice、warn、error、crit、

#アラート、emerg。

ログレベル警告



CustomLog /var/log/apache2/access.logの組み合わせ

ServerSignature On



エイリアス/ doc / "/ usr / share / doc /"

<ディレクトリ "/ usr / share / doc /">

オプションインデックスMultiViews FollowSymLinks

AllowOverrideなし

注文拒否、許可

すべてから拒否

127.0.0.0/255.0.0.0 :: 1/128から許可













標準の仮想ホストテンプレートに基づきます。

私は次のことに特に注意を払っています。

1. vhost_aliasモジュールを接続する必要があります

#a2emod vhost_alias



2. VirtualDocumentRoot / home / htdocs /%-2 + / www

%-2 +は、本質的には要求からのドメイン名の最後の2つの部分を意味します。

つまり リクエストがsub.domain.comに送信される場合、DocRootは/home/htdocs/domain.ruになります

要求されたドメインのフルネームが必要な場合は、%-2 +を$ 0に置き換えてください。



3.すべてが素晴らしいでしょうが、この構成では、Apacheは間違った$ _SERVER ["DOCUMENT_ROOT"]を送信します!!!

この迷惑な問題を修正するには、ディレクティブを使用します

php_admin_value auto_prepend_file /home/htdocs/fix_doc_root.php



スクリプト/home/htdocs/fix_doc_root.phpの内容:

<?

$l = explode("/",$_SERVER['SCRIPT_FILENAME']);

$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"] = implode("/",Array( $l[0], $l[1], $l[2], $l[3], $l[4]));

?>









ご清聴ありがとうございました。



この投稿は私のリクエストで投稿されました。 私自身は登録していません。 記事が気に入ったら-glukas.lss@gmail.com。

セルゲイ・リャプコ



All Articles