ngnix下conf通用設置方法(php fastcgi)

毛有辦法 8年前發布 | 65K 次閱讀 Web服務器

來自: http://my.oschina.net/kmwzjs/blog/611125


核心做法:

涉及倒三類配置文件

1. 基礎文件 conf/nginx.conf
# 說明:nginx默認會引用該文件,該文件會做最通用的參數設置

2. fastcgi參數文件 conf/nginx.conf
# 說明 fastcgi會設置所有站點都通用的參數

3. 站點文件 如:conf/vhost/a.com 可以有多個,放在vhost文件夾下

彼此引用說明

在基礎文件conf/nginx.conf中插入include *.conf 引用站點文件
站點文件中合適位置插入include fastcgi.conf 設置fastcgi,如果要覆蓋參數,可以在引用再賦值一次即可

nginx配置文件里指令的繼承關系:Nginx配置文件分為好多塊,常見的從外到內依次是「http」、「server」、「location」等等,缺省的繼承關系是從外到內,也就是說內層塊會自動獲取外層塊的值作為缺省值

值得參考的文章:http://huoding.com/2013/10/23/290

 

詳細說明:

nginx.conf中設置基礎參數,內容如下:

#用戶及用戶組設置
user  www www;

worker_processes  1;

#錯誤級別的日志設置
error_log  logs/error.log;

#其他級別的日志設置
#error_log  logs/error.log notice;
#error_log  logs/error.log info;

pid logs/nginx.pid;

events {
    use epoll;
    worker_connections  1024;
}

http {
    #fastcgi_intercept_errors on;
    #error_page  404 ;
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    #access_log  logs/access.log main;
    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 300m;
    sendfile        on;
    tcp_nopush     on;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    #keepalive_timeout  0;
    keepalive_timeout  60;
    tcp_nodelay on;
    server_tokens off;
    gzip  on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types       text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
     
    #未綁定域名返回404
    server {
       listen 80 default;
       return 404;
    }
 
    #加載每個站點conf文件
    include vhost/*.conf;
}

 

單個站點conf文件放在conf/vhost文件夾下,比如建立一個a.com.conf,內容見下方:

server {
    #監聽端口
    listen 80;
    
    #綁定域名,用空格分開多個域名
    server_name a.com www.a.com;
    
    #默認首頁
    index index.php index.html index.htm;
    
    #站點目錄
    set $root_path '/data/wwwroot/a.com/web';
    root $root_path;
    
    #訪問日志
    #access_log logs/a.com_access.log main;
    
    #錯誤日志
    #error_log logs/$host_error.log;   

    #偽靜態
    location / {
        #ci框架
        #try_files $uri $uri/ /index.php?$query_string;
        
        #phalcon框架
        #try_files $uri $uri/ /index.php?_url=$uri&$args;
    }

    #php文件采用fastcgi解析并設置參數
    location ~ \.php {
        try_files $uri = 404;
        
        fastcgi_index  /index.php;
        fastcgi_pass   127.0.0.1:9000;
        
        #加載fastcgi.conf文件中的參數
        include fastcgi.conf;
        
        #設置有權限目錄,fastcgi.conf中默認設置就是站點目錄$document_root,如果要改變就需要重新賦值
        #phalcon舉例
        #fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/../:/data/tmp/php/upload/:/proc/";
    }
    
    #禁止下載偽靜態文件
    location ~ /\.ht {
        deny all;
    }
}

 

conf/fastcgi.conf內容:

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

# 用一個文件或狀態碼(=404)作為最后一個參數,如果是最后一個參數是文件,那么這個文件必須存在
try_files $fastcgi_script_name = 404;

#可以自定義值,比如區分開發(dev)和生成環境(product),在php中用getenv('MY_ENV')或$_SERVER['MY_ENV']獲取
fastcgi_param MY_ENV "product";

#防跨站設置
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/data/tmp/php/upload/:/proc/";

需要說明的:Nginx有兩份fastcgi配置文件,分別是舊的「fastcgi_params」和新的「fastcgi.conf」,它們沒有太大的差異,唯一的區別是后者比前者多了一行「SCRIPT_FILENAME」的定義,只需要引用一份新的配置文件fastcgi.conf即可

 

fastcgi參數說明,參考:http://www.ivpeng.com/pblog/cgi-arg.html

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;#腳本文件請求的路徑
fastcgi_param  QUERY_STRING       $query_string; #請求的參數;如?app=123
fastcgi_param  REQUEST_METHOD     $request_method; #請求的動作(GET,POST)
fastcgi_param  CONTENT_TYPE       $content_type; #請求頭中的Content-Type字段
fastcgi_param  CONTENT_LENGTH     $content_length; #請求頭中的Content-length字段。
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name; #腳本名稱
fastcgi_param  REQUEST_URI        $request_uri; #請求的地址不帶參數
fastcgi_param  DOCUMENT_URI       $document_uri; #與$uri相同。
fastcgi_param  DOCUMENT_ROOT      $document_root; #網站的根目錄。在server配置中root指令中指定的值
fastcgi_param  SERVER_PROTOCOL    $server_protocol; #請求使用的協議,通常是HTTP/1.0或HTTP/1.1。
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;#cgi 版本
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;#nginx 版本號,可修改、隱藏
fastcgi_param  REMOTE_ADDR        $remote_addr; #客戶端IP
fastcgi_param  REMOTE_PORT        $remote_port; #客戶端端口
fastcgi_param  SERVER_ADDR        $server_addr; #服務器IP地址
fastcgi_param  SERVER_PORT        $server_port; #服務器端口
fastcgi_param  SERVER_NAME        $server_name; #服務器名,域名在server配置中指定的server_name
#fastcgi_param  PATH_INFO         $path_info;#可自定義變量
# PHP only, required if PHP was built with –enable-force-cgi-redirect
#fastcgi_param  REDIRECT_STATUS    200;
在php可打印出上面的服務環境變量
如:echo $_SERVER[‘REMOTE_ADDR’]

 

 本文由用戶 毛有辦法 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!