vim /usr/local/nginx/conf/nginx.confphp
增長include vhost/*.conf;css
mkdir /usr/local/nginx/conf/vhosthtml
vim /usr/local/nginx/conf/vhost/aaa.com.conf #虛擬主機配置文件linux
server { listen 80 default_server; (有default_serve就是默認虛擬主機) server_name aaa.com; (定義網站名字) index index.html index.htm index.php; root /data/wwwroot/default; (定義配置文件目錄,還沒建立) }
若是給虛擬主機配置php解析就加入:nginx
server { listen 80 default_server; server_name aaa.com; index index.html index.htm index.php; root /data/wwwroot/default; location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name; } }
vim /usr/local/nginx/conf/vhost/test.com.conf server { listen 80; server_name test.com; index index.html index.htm index.php; root /data/wwwroot/test.com; location / { auth_basic "Auth"; #用戶認證的名字 auth_basic_user_file /usr/local/nginx/conf/htpasswd; #用戶的密碼文件 } }
建立密碼文件在此須要使用Apache的/usr/local/apache/bin/htpasswd命令,須要使用yum安裝httpd命令:web
htpasswd -c /usr/local/nginx/conf/htpasswd quyifan算法
vim /usr/local/nginx/conf/vhost/test.com.conf server { listen 80; server_name test.com test1.com test2.com; index index.html index.htm index.php; root /data/wwwroot/test.com; if ($host != 'test.com' ) { rewrite ^/(.*)$ http://test.com/$1 permanent; (這裏指不是rest.com的所有跳轉) } }
vim /usr/local/nginx/conf/vhost/test.com.conf access_log /tmp/test.com.log quyifan
vim /usr/local/sbin/nginx_log_rotate.sh shell腳本保存在這裏 配置以下 #! /bin/bash d=`date -d "-1 day" +%Y%m%d` #定義切割時間(切割一天前的日誌) logdir="/tmp/" #此處指定要切割的日誌路徑(該路徑來自虛擬主機配置文件) nginx_pid="/usr/local/nginx/logs/nginx.pid" #調用pid的目的是執行命令:/bin/kill -HUP `cat $nginx_pid` #該命令等價於命令:nginx -s reload(從新加載文件),確保與虛擬主機配置文件變動保持同步 #該地址來自nginx配置文件 cd $logdir for log in `ls *.log` do mv $log $log-$d done #此處使用通配進行循環,對全部複合條件的日誌文件進行切割 /bin/kill -HUP `cat $nginx_pid` #執行此命令進行重載生成新的日誌文件來記錄新的日誌
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 正則 { expires 7d; (上下寫一塊兒是由於設置的過時時間不一樣) access_log off; } location ~ .*\.(js|css)$ { expires 12h; access_log off; }
location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$ { expires 7d; valid_referers none blocked server_names *.test.com ; #這裏定義.test.com爲白名單 if ($invalid_referer) { return 403; #這裏表示若是不在白名單內直接回饋403 } access_log off; }
#限制某些ip不能訪問,或者只容許一部分訪問 location /admin/ { allow 192.168.153.130; allow 127.0.0.1; deny all; } #若是隻拒絕幾個ip的訪問就是 location /admin/ { deny 192.168.188.1; deny 192.168.8.8; } #能夠匹配正則來限制 location ~ .*(abc|image)/.*\.php$ { deny all; } #根據user_agent限制,用的不少受到cc攻擊,要禁掉百度蜘蛛,想作被隱藏的網站 if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato') { return 403; } 這裏~指匹配符號,只要有Spider/3.0或YoudaoBot或Tomato字符串的直接被拒絕,返回403
location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcgi.sock; (此處錯誤出現502,找不到sock) #fastcgi_pass 127.0.0.1:9000 #fastcgi_pass 兩種監聽格式,可是要保證Nginx和php-fpm中格式一致 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name; #這裏的地址和最上面的root保持一致 }
server { listen 80; server_name ask.apelearn.com; location / { proxy_pass http://121.201.9.155/; #這裏是告訴Nginx代理服務器,真正要被訪問的web服務器ip是多少 proxy_set_header Host $host; #Host指的是要訪問的域名servername,就是代理服務器真正訪問的域名ask.apelearn.com proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
upstream qq #這裏定義後端的web server,能夠是一個或多個 { ip_hash; #表示負載均衡算法,表示根據ip地址把請求分到不一樣服務器上(同一個用戶始終保持在同一個機器上) #例如訪問阿銘論壇,第一次在發帖子登陸,刷新後發現沒登陸,就是訪問到另外一個機器上了 #用戶A與用戶Bip不一樣,A訪問時會把請求轉發到第一個web server上,B訪問會到第二個web server上 #這種算法用在把session存到本機磁盤的狀況 server 61.135.157.156:80; server 125.39.240.113:80; #這裏定義多個ip } server { listen 80; server_name www.qq.com; location / { proxy_pass http://qq;(這裏寫upstream的名字,表明它下面的ip) proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
server { listen 443; server_name aming.com; index index.html index.php; root /data/wwwroot/aming.com; ssl on; ssl_certificate aminglinux.crt; ssl_certificate_key aminglinux.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; }
php-fpm做爲獨立的一個服務存在,必然有本身的配置文件,/usr/local/php-fpm/etc/php-fpm.confshell
vim /usr/local/php-fpm/etc/php-fpm.conf #加入第二行配置,這裏沒有把兩個pool分開 [aming] listen = /tmp/aming.sock listen.mode=666 user = php-fpm group = php-fpm pm = dynamic pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500 rlimit_files = 1024 vim /usr/local/php-fpm/etc/php-fpm.conf //主配置文件中的[global]部分增長 include = etc/php-fpm.d/*.conf vim /usr/local/php-fpm/etc/php-fpm.d/www.conf #這裏把兩個pool分開和nginx.conf相似 vim /usr/local/nginx/conf/vhost/aaa.com.conf location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/aming.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name; }
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//加入以下內容 request_slowlog_timeout = 1 (能夠寫成兩秒不少腳本都超過一秒) #定義超時時間,即php的腳本執行時間超過1秒就會記錄日誌 slowlog = /usr/local/php-fpm/var/log/www-slow.log #定義慢執行日誌的路徑和名字,遇到php網站訪問卡頓,來查看這個慢執行日誌
安全限制apache
當一臺服務器跑多個站點時,使用openbasedir限定各個站點所能訪問的服務器上的目錄的範圍vim
vim /usr/local/php-fpm/etc/php-fpm.d/aming.conf//加入以下內容 php_admin_value[open_basedir]=/data/wwwroot/aming.com:/tmp/
vim /usr/local/php/etc/php-fpm.d/www.conf 配置文件內容 pm = dynamic #定義php子進程啓動模式,dynamic動態進程管理模式,指一開始啓動少許子進程,根據實際需求,動態的增長或減小子進程,最多不超過下面pm.max_children定義的數值 #也能夠是static,這種模式下進程數由pm.max_children決定,一次性啓動這麼多,不會增長或減小 pm.max_children = 50 #最大子進程數,ps aux能夠查看 pm.start_servers = 20 #針對dynamic模式,定義啓動php-fpm服務時會啓動的進程數 pm.min_spare_servers = 5 #針對dynamic模式,定義在空閒時段,子進程數的最少數量,若是達到這個數值時,php-fpm服務會自動派生新的子進程 pm.max_spare_servers = 35 #針對dynamic模式,定義在空閒時段,子進程數的最大值,若是高於這個數值就開始清理空閒的子進程 pm.max_requests = 500 #針對dynamic模式,定義一個子進程最多處理的請求數,也就是說在一個php-fpm的子進程最多能夠處理這麼多請求,當達到這個數值時,它會自動退出