web-dev-qa-db-ja.com

異なるユーザーですべてのサブドメインを実行するようにnginx + php(fcgi)を構成するにはどうすればよいですか?

私はnginxにかなり慣れていませんが、学習目的のために、サブドメインごとに異なるユーザーでphpを実行するためにNginxを構成しようとしています。

たとえば、foo.example.comのすべてのスクリプトにユーザーjohnを使用し、bar.example.comにユーザーjackを使用したいとします。

私はすでに私のシステム(ubuntuサーバー)でユーザーを作成しましたが、ユーザーを使用するようにnginxに指示する方法がわかりません-そして、簡単に多くのユーザーを処理できるソリューションを探しています、たとえば〜2000。

ドキュメントを見ると、(異なるポートを持つ)すべてのユーザーに対してphp5-cgiプロセスを生成し、それをsites-availableサイトに取り込む必要があるかどうかわかりません(初心者だと言ったように、これは私にはサーバー自殺のように見えます)、そしてそれについて話しているnginx構成の2ページだけが中国語で書かれています( page1page2 )、ハードgoogle translateで翻訳する(ただし、コードを見ると、server-suicideの方法とはまったく異なる方法を使用しています)

なにか提案を?

更新

ガラドールの答えは仕事をしますが、新しいサイトごとにnginx/fpmを再起動する必要のない(ワイルドカードサブドメインを使用した)ダイナミカル環境を構築しようとしていますが、これは可能ですか?

4
Strae

編集:「最大2000ユーザーに拡張する必要がある」という要件に気づきました...これは最善の選択肢ではないかもしれませんが、おそらく簡単にできるでしょう少しのスクリプトで自動化されています。

php-fpm を使用して、次のようなことを行うことができます(fpmはPHPの一部であるため、 PHP 5.3. です。私のVPS上のいくつかのサイト、および同様のものを使用します。

私のメインのphp-fpm.confは次のようになります。

;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;
include=/usr/local/etc/fpm.d/*.conf

;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;

[global]
; Pid file
; Default Value: none
pid = /var/run/php-fpm.pid

; Error log file
; Default Value: /var/log/php-fpm.log
error_log = /var/log/php-fpm.log

; Log level
; Possible Values: alert, error, warning, notice, debug
; Default Value: notice
;log_level = notice

; If this number of child processes exit with SIGSEGV or SIGBUS within the time
; interval set by emergency_restart_interval then FPM will restart. A value
; of '0' means 'Off'.
; Default Value: 0
;emergency_restart_threshold = 0

; Interval of time used by emergency_restart_interval to determine when 
; a graceful restart will be initiated.  This can be useful to work around
; accidental corruptions in an accelerator's shared memory.
; Available Units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
;emergency_restart_interval = 0

; Time limit for child processes to wait for a reaction on signals from master.
; Available units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
;process_control_timeout = 0

; Send FPM to background. Set to 'no' to keep FPM in foreground for debugging.
; Default Value: yes
;daemonize = yes

そして、fpm.dフォルダーに、次のような各サイトの構成ファイルがあります。

[myuser]
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
user = myuser
group = myuser

pm = dynamic
pm.max_children = 15
pm.start_servers = 3
pm.min_spare_servers = 1
pm.max_spare_servers = 5
pm.max_requests = 2000

request_slowlog_timeout = 5
slowlog = /home/myuser/tmp/logs/myuser.slow.log

php_admin_value[error_log] = /home/myuser/tmp/logs/myuser.error.log
php_admin_flag[log_errors] = on

次に、サイトごとに、独自のファイルでユーザーとポートを変更します。nginx構成では、次のようになります。

location ~ .*.php$ {
    include /usr/local/etc/nginx/fastcgi_params;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Fastcgi_passディレクティブのポートを変更します。

6
bhamby