大神教你Nginx經常使用基礎配置方案

Nginx的fastcgi模塊參數設置javascript

Nginx 有兩個配置文件fastcgi_params、fastcgi.conf,二者惟一的區別是,fastcgi.conf 多一個參數 SCRIPT_FILENAME,diff顯示以下:php

$diff fastcgi fastcgi_params

< fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
vim 進入/usr/local/nginx/conf/fastcgi_params文件

#請求的參數;如?app=123fastcgi_param
fastcgi_param QUERY_STRING $query_string;

##請求的動做(GET,POST)
fastcgi_param REQUEST_METHOD $request_method;

#請求頭中的Content-Type字段
fastcgi_param CONTENT_TYPE $content_type;

#請求頭中的Content-length字段
fastcgi_param CONTENT_LENGTH $content_length;

#腳本名稱
fastcgi_param SCRIPT_NAME $fastcgi_script_name;

#請求的地址不帶參數
fastcgi_param REQUEST_URI $request_uri;

#與$uri相同
fastcgi_param DOCUMENT_URI $document_uri;

#網站的根目錄。在server配置中root指令中指定的值
fastcgi_param DOCUMENT_ROOT $document_root;

#請求使用的協議,一般是HTTP/1.0或HTTP/1.1
fastcgi_param SERVER_PROTOCOL $server_protocol;

#https 若是value非空才進行設置
fastcgi_param HTTPS $https if_not_empty;

#cgi 版本
fastcgi_param GATEWAY_INTERFACE CGI/1.1;

#nginx 版本號,可修改、隱藏
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

#客戶端IP
fastcgi_param REMOTE_ADDR $remote_addr;

#客戶端端口
fastcgi_param REMOTE_PORT $remote_port;

#服務器IP地址
fastcgi_param SERVER_ADDR $server_addr;

#服務器端口
fastcgi_param SERVER_PORT $server_port;

#服務器名,域名在server配置中指定的server_name
fastcgi_param SERVER_NAME $server_name;

可自定義變量
fastcgi_param PATH_INFO $path_info;

#在尾部另起一行追加便可保存跟fastcgi.conf 一致
fastcgi_param REDIRECT_STATUS 200;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

在php可打印出上面的服務環境變量
如:echo $_SERVER[‘REMOTE_ADDR’]

Nginx的經常使用指令解釋css

fastcgi_pass

這個命令是指定將http代理到哪一個fastcgi服務端接口。fastcgi_pass後面是填寫fastcgi服務端地址的,這個地址能夠是域地址,也能夠是Uninx-域套接字, 另外也能夠是upstream中設置的反向代理。

fastcgi_pass localhost:9000; #默認PHP起在9000端口
fastcgi_pass unix:/tmp/fastcgi.socket;
fastcgi_pass upstream_php5; #這裏指定的反向代理能夠在nginx.conf中upstream中設置
fastcgi_param

這個命令是設置fastcgi請求中的參數,默認參數在上面提到的fastcgi模塊參數文件中,具體設置的東西能夠在$_SERVER中獲取到。
好比你想要設置當前的機器環境,可使用fastcgi_param ENV test;來設置。
對於php來講,最少須要設置的變量有:

fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_index

這個命令設置了fastcgi默認使用的腳本。就是當SCRIPT_FILENAME沒有命中腳本的時候,使用的就是fastcgi_index設置的腳本。

fastcgi_index index.php;

以上三個命令能組成最基本的fastcgi設置了:html

location / {
fastcgi_pass localhost:9000;
fastcgi_index index.php;

#下面這一個能夠直接在fastcgi_param配置文件中指定
fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$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;
}

圖片(或者靜態文件)服務器配置java

server {
listen 80;
server_name images.xxx.com img.movie.xxx.com;
root /data/vhosts/xxx.com/images/public_html/;
index index.shtml index.html index.htm;

#若是是js、css、json文件能夠指定壓縮來減小傳輸文件大小
gzip_types text/plain application/x-javascript text/css application/xml text/xml application/json;
}

基礎服務器linux

server {
listen 80;
server_name www.xxx.com;
root /data/vhosts/xxxx.com/public_html/;
index index.htm index.php index.html index.shtml;

location / {
ssi on;
ssi_silent_errors on;
ssi_types text/shtml;
include other.conf; #這裏能夠配置其餘的公共配置,或者重寫規則
}

location ~\.php$ {
expires off;
include fastcgi_params; #fastcgi 指定的參數配置
fastcgi_pass 127.0.0.1:9000; #這裏同上也可指定代理或socket
fastcgi_index index.php;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
}

配置ssi_inclue訪問的目錄不存在是指定的目錄nginx

location ~ /ssi_include/ {
if (!-e $request_filename) {
rewrite ^(.*)$ /blank.html last;
}
}

配置靜態文件默認的錯誤頁面web

location ~(\.html|\.htm|\.shtml)$ {
error_page 404 500 502 503 504 /404.html;
}
}

Auth權限設置json

step 1. 在根域名下面須要配置權限的目錄設置locationvim

location /phpMyAdmin/ {
allow 192.168.0.1;
allow xx.xx.xxx.xxx;
allow xx.xx.xxx.xxx;
deny all;
auth_basic "Restricted";
auth_basic_user_file /usr/local/nginx/conf/auth_phpmyadmin.pass;
}

step2. 在 auth_basic_user_file 指定的文件下面增長帳號密碼,一行一個

username1:password1
username2:password2
username3:password3
username4:password4

Nginx反向代理

第一種反向代理:

location / {
proxy_pass http://192.168.1.4:8099/;
#若針對不一樣的目錄進行代理把下面的配置放到根目錄代理的上面
#proxy_pass http://192.168.1.4:8099/linuxtone/;
proxy_redirect default ;
}

第二種反向代理:

upstream配置
upstream xx.xxx.com {
server 192.168.1.4:8099;
}

站點配置文件

server
{
listen 80;
server_name bbs.linuxtone.conf;
index index.html index.htm;
root /date/vhosts/xxx.com/;

location ~ ^/NginxStatus/ {
stub_status on;
access_log off;
}
location / {
proxy_redirect off ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 50m; #緩衝區代理緩衝用戶端請求的最大字節數,能夠理解爲保存到本地再傳給用戶
client_body_buffer_size 256k;
proxy_connect_timeout 30; #nginx跟後端服務器鏈接超時時間(代理鏈接超時)
proxy_send_timeout 30;
proxy_read_timeout 60; #鏈接成功後,後端服務器響應時間(代理接收超時)
proxy_buffer_size 256k; #設置代理服務器(nginx)保存用戶頭信息的緩衝區大小
proxy_buffers 4 256k; #proxy_buffers緩衝區,網頁平均在256k如下的話,這樣設置
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_max_temp_file_size 128m;
proxy_ignore_client_abort on; #不容許代理端主動關閉鏈接
#http://xx.xxx.com 指上面upstream塊的名稱
proxy_pass http://xx.xxx.com;
}

Apache反向代理

#設置該域名轉發給8080端口

ServerAdmin webmaster@dummy-host2.example.com
ServerName www.xxx.com
ProxyRequests off
Order deny,allow
Allow from all
ProxyPass / http://www.xxx.com:8080/
ProxyPassReverse / http://www.xxx.com:8080/

ProxyPassReverse通常和ProxyPass指令配合使用,此指令使Apache調整HTTP重定向應答中Location, Content-Location, URI頭裏的URL,這樣能夠避免在Apache做爲反向代理使用時,。後端服務器的HTTP重定向形成的繞過反向代理的問題

禁止蜘蛛訪問

#判斷UA,若是UA不包含spider或者bot(不區分大小寫),表示UA爲正經常使用戶

#設置變量is_human值爲yes

if ($http_user_agent !~* "spider|bot") {
set $is_human 'yes';
}

#當有任意請求的時候,該UA不是正經常使用戶,則表示應該是蜘蛛類程序,則返回403

location / {
if ($is_human != 'yes') {
return 403;
}
}

#當有任意請求的時候

location / {
#當訪問者UA包含有spider或則bot的時候(不區分大小寫),說明是蜘蛛類來訪
if ($http_user_agent ~* "spider|bot") {
# 直接就屏蔽蜘蛛的整站訪問
return 403;
}
}

給系統添加了robots.txt文件:

User-agent: *
Disallow: /
相關文章
相關標籤/搜索