php+nginx項目中的權限

php+nginx項目中的權限

nginx/php-fpm

進程權限

  • 主進程
    用戶爲啓動的用戶php

  • 子進程html

  1. nginx的用戶爲nginx.conf中配置的用戶nginx

  2. php-fpm的用戶爲php-fpm.conf中配置的用戶app

如:啓動nginx的是root,nginx中配置的user是nginx,那主進程就是root,子進程就是nginxsocket

處理方式

如下訪問均以nginx子進程進行php-fpm

靜態文件

  • 步驟:nginx訪問/index.html時,nginx會直接訪問對應文件,並將內容返回給請求的客戶端。操作系統

  • 權限狀況:此時只須要nginx擁有index.html文件的權限便可。unix

php腳本文件

  • 步驟:code

  1. nginx訪問/index.php時,nginx爲了可以把正確的腳本處理結果返回給客戶端,須要進行配置告訴nginx.php是非靜態文件,須要php腳本解析器進行處理後才能返回內容。htm

  2. 通常來說會在nginx配置中加上相似fastcgi_pass unix:/var/run/php5-fpm.sock;這樣的配置項,指明nginx在遇到訪問腳本文件時須要去找誰,以後會訪問該文件作到將請求轉發至php-fpm。

  3. 由php-fpm訪問真正的php腳本文件,將結果返回值nginx,再有nginx將結果返回至客戶端。

  • 權限狀況:

  1. nginx須要有/var/run/php5-fpm.sock文件權限;

  2. php-fpm須要有/index.php文件權限;

用戶配置位置

nginx用戶設置在nginx.conf中第一行的user

php-fpm用戶設置在php-fpm.conf中的

  • listen.owner = xxx;設置unix socket用戶

  • user = xxx設置進程啓動用戶

注:以上兩個配置文件不一樣的操做系統下文件名略有不一樣,請根據自身安裝狀況自行判斷。

nginx轉發內容到php-fpm不僅有/var/run/php5-fpm.sock的方式,在php-fpm.conf中還能夠經過配置改成xxx.xxx.xxx:9000等方式

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all IPv4 addresses on a
;                            specific port;
;   '[::]:port'            - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /var/run/php5-fpm.sock

其餘

比較特別的點,通常nginx都是用root用戶啓動的(爲了獲取80端口權限),若是本地開發nginx是用普通用戶重啓,那麼主進程和子進程都會是當前用戶,nginx.conf中的配置再也不起效,暫不清楚緣由。

相關文章
相關標籤/搜索