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

核心作法:

涉及三類配置文件

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

2. fastcgi參數文件 conf/fastcgi.conf
# 說明:fastcgi會設置全部站點通用參數

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

彼此引用說明

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

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

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

詳細說明:

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

#用戶及用戶組設置
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;
       fastcgi_intercept_errors on;
       error_page 404 /404.html;
       location /404.html {
           root /data/web/404;
           internal;
       }
    }

 
    #加載每一個站點conf文件
    include vhost/*.conf;
}

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

server {
    #監聽端口
    listen 80;
    
    #request大小
    client_max_body_size 50M;
    
    #綁定域名,用空格分開多個域名
    server_name a.com www.a.com;
    
    #不帶www域名作301跳轉
    if ( $host != 'www.a.com' ) {
        #return方法,效率更高
        return 301 http://www.a.com$request_uri; 
        
        #rewrite寫法
        #rewrite ^/(.*)$ http://www.a.com/$1 permanent; 
    }
    
    #默認首頁
    index index.php index.html index.htm;
    
    #站點目錄
    set $root_path '/data/wwwroot/a.com/web/';
    root $root_path;
    
    #日誌前綴設置
    #set $log 'a.com'
    #訪問日誌
    #access_log logs/$log_access.log main;
    
    #錯誤日誌
    #error_log logs/$log_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 {
        fastcgi_index  /index.php;
        fastcgi_pass   127.0.0.1:9000;
        
        #加載fastcgi.conf文件中的參數
        include fastcgi.conf;
        
        #設置有權限目錄,fastcgi.conf中默認設置就是站點目錄$document_root,若是要改變就須要從新賦值
        #phalcon或laravel舉例
        #fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root../:/data/tmp/php/upload/:/proc/";
    }
    
    #禁止下載僞靜態文件
    location ~ /\.ht {
        deny all;
    }
}

conf/fastcgi.conf內容:java

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便可node

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

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['MY_ENV'] //只適配nginx,不適用cli模式,cli模式必須設置系統變量,mac下在~/.bash_profile

nginx內置變量

https://moonbingbing.gitbooks.io/openresty-best-practices/content/openresty/inline_var.htmllaravel

默認編碼問題

注:php.5.6默認是utf-8,必須改爲自動適配git

# php.ini裏面的配置
; default_charset = "UTF-8"

#不能註釋,必須改爲下面的形式,否則仍是默認utf-8
default_charset = ""

關於僞靜態

https://www.lyblog.net/detail/600.htmlweb

須要說明的是:rewrite regex replacement [flag]; regex指的是url中的字符串

location / {
    rewrite ^/news-(\d+).html$ /news.php?cat_id=$1 last;
    #將news.php?cat_id=110僞靜態成news-110.html
}

nging支持PATH_INFO

參考1:http://www.laruence.com/2009/11/13/1138.html

參考2:http://www.laruence.com/2009/11/13/1138.html

支持ssi

在http{}或者server中的location / {}中添加以下代碼便可:

ssi on;
ssi_silent_errors on;
ssi_types text/shtml;
相關文章
相關標籤/搜索