1、PHP源碼安裝javascript
一依賴包php
yum -y install wget vim pcre pcre-devel openssl openssl-devel httpd-devel libicu-devel gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap openldap-devel nss_ldap cmake boost-devel bison automake libevent libevent-devel gd gd-devel libtool* libxslt libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-develcss
一配置html
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-pdo --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir= --enable-xml --enable-session --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --enable-intl --enable-pcntl --enable-ftp --with-gd --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --disable-fileinfo --enable-opcache --enable-maintainer-zts --with-xsl --enable-tokenizer前端
--enable-fpmjava
若是是apache則加上--with-apxs2=/usr/local/apache2.4/bin/apxs 並去掉--enable-fpmnode
編譯並安裝mysql
make make installlinux
中途編譯失敗 make cleannginx
2、Mysql 安裝(rpm安裝)
1.先檢查是否安裝mysql
yum list installed | grep mysql
如有自帶安裝的則卸載,由於不必定徹底
yum remove –y mysql-libs
2.從官網下載mysql的rpm包,有4個組件
https://dev.mysql.com/downloads/repo/yum/
lib common client server
3.依次安裝
rpm 包名 --force –nodeps
3、安裝nginx(源碼安裝)
依賴包(gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel)
下載源碼包網址http://nginx.org/en/download.html
插件模塊:nginx_upstream_check_module-0.3.0.tar.gz
nginx-goodies-nginx-sticky-module-ng-bd312d586752.tar.gz
軟件配置:./configure --prefix=/usr/local/nginx-1.6 --with-pcre \
--with-http_stub_status_module --with-http_ssl_module \
--with-http_gzip_static_module --with-http_realip_module \
--add-module=../nginx_upstream_check_module-0.3.0
編譯並安裝:make && make install
4、設置
1.mysql設置
(1)更改mysql密碼
1.1 先查看mysql初始密碼
啓動mysql:systemctl start mysqld.service
查看初始密碼: grep 「root@localhost」 /var/log/mysqld.log
1.2 登陸mysql
mysql –uroot –p 回車
輸入密碼
1.3 更改密碼
alter user 「root」@」localhost」 identified by 「root123」;
(2)設置字符集
2.1 查看mysql字符集
show variables like 「%char%」;
2.2 設置字符編碼
vi /etc/my.cnf
加入以下代碼:
init-connect=」SET NAMES utf8mb4」
default-storage=INNODB
character-set-server=utf8mb4
[mysql]
deault-character-set=utf8mb4
[client]
deault-character-set=utf8mb4
(3)設置遠程鏈接:
1. 開放遠程ip權限:grant all privileges on *.* to 「xiaobai」@"%"identified by "root123"with grant option;
上面設置:全部
ip
都能經過
root
用戶以
root123
密碼訪問
mysql
的全部庫和表
2.
關閉
selinux
查看是否開啓:
getenforce 結果:Enforcing 開啓 , Permissive 關閉
臨時關閉:setenforce 0
永久關閉: vim /etc/sysconfig/selinux
SELINUX=enforcing 改成 SELINUX=disabled
reboot 重啓linux
(4)注意問題:
在每次linux後,mysql服務啓動都會失敗,緣由:沒法建立pid
解決辦法:每次重啓後建立目錄 mysqld
mkdir /var/run/mysqld
chown mysql.mysql /var/run/mysqld
緣由:run目錄下文件建立在內存中
systemctl daemon-reload //剛剛配置的服務須要讓systemctl能識別,就必須刷新配置
chkconfig mysqld on //加入隨系統啓動啓動
2.php設置
(1)配置文件設置
1. 源碼包解壓後,文件夾中有php.ini-development
mv php.ini-development /usr/local/php/etc/php.ini
2. /usr/local/php/etc/下
cp php-fpm.conf.default php-fpm.conf
vi php-fpm.conf 去掉 :pid = run/php-fpm.pid 前分號
3. /usr/local/php/etc/php-fpm.d/
(2)服務控制
1. 啓動
/usr/local/php/sbin/php-fpm
或者設置環境變量
vim /etc/profile
export PATH=/usr/local/php/sbin:$PATH
使環境變量生效:source /etc/profile
查看環境變量:echo $PATH
(3)時區設置
vi /usr/local/php/etc/php.ini
date.timezone = PRC
(4)與nginx整合
nginx遇到.php結尾文件,交給php處理
location ~ .*\.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
3.nginx設置
(1)要能外部訪問nginx服務,要開放80端口或關閉防火牆
關閉防火牆
1.1查看防火牆是否開啓
firewall-cmd –state
輸出:not running則未開啓
1.2關閉防火牆
systemctl stop firewalld.service //臨時關閉
systemctl disable firewalld.service //永久關閉
開放80端口
1.1 永久開放80端口
firewall-cmd --zone=public --add-port=80/tcp –permanent
1.2 重啓防火牆
systemctl stop firewalld.service
systemctl start firewalld.service
(2)啓動nginx服務
2.1: /usr/local/nginx/sbin/nginx 回車
或設置環境變量 vi /etc/profile
export PATH=/usr/local/nginx/sbin:$PATH
以後能夠直接使用nginx命令
2.2:查看nginx服務是否啓動
netstat -tunpl |grep nginx
2.3: nginx命令基本使用:
nginx –s stop/start/reload/quit /中止/啓動/重啓/請求結束後退出
nginx –t 檢測配置文件是否正確
nginx –v nginx編譯時參數
nginx –h 查看nginx命令幫助
2.4:nginx信號控制
kill -INT 當即關閉進程
kill -QUICK 請求結束後,關閉進程
kill -HUP 重啓nginx服務
kill -USR1 ‘cat /usr/local/nginx/logs/nginx.pid’ 重讀日誌文件,用於日誌備份
(3)nginx配置文件
詳細配置參見:http://www.javashuo.com/article/p-dbvjthmd-bb.html
注意:nginx不像node.js能夠直接向瀏覽器響應輸出,若要實現此功能,須要添加第三方模塊。
nginx的配置,只是讓請求指向某個目錄,並在該目錄中查找請求的文件。若請求指向了某個目錄,但並無請求某個文件,則該目錄的主頁返回給瀏覽器,請求了某個文件,但該目錄中不存在,則報404,存在,則返回給瀏覽器。
3.1 查看配置文件
egrep -v 「#|^$」 nginx.conf 去掉配置文件中註釋和空行
3.2 配置文件內容
全局配置:配置影響nginx全局的指令。通常有運行nginx服務器的用戶組,nginx進程pid存放路徑,日誌存放路徑,配置文件引入,容許生成worker process數等
worker_processes 2; #不超過cpu核心數,容許生成的nginx進程數
user administrator administrators; #配置用戶或者組,默認爲nobody nobody
pid /nginx/pid/nginx.pid; #指定保存nginx進程id的文件
error_log log/error.log debug; #制定錯誤日誌路徑,級別。這個設置能夠放入全局塊,http塊,server塊
事件配置:配置影響nginx服務器或與用戶的網絡鏈接。有每一個進程的最大鏈接數,選取哪一種事件驅動模型處理鏈接請求,是否容許同時接受多個網路鏈接,開啓多個網絡鏈接序列化等
event{
accept_mutex on; #設置網路鏈接序列化,防止驚羣現象發生,默認爲on
multi_accept on; #設置一個進程是否同時接受多個網絡鏈接,默認爲off
worker_connections 1024; #每一個工做進程的最大鏈接數,默認爲512
use epoll; #參考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本內核中的高性能網絡I/O模型,若是跑在FreeBSD上面,就用kqueue模型。
}
虛擬主機配置:
虛擬主機:4種形式(基於IP 基於端口 基於域名 混合形式)
1.基於ip
http {
server {
listen 192.168.239.131:80 ;
server_name node1;
root /var/www/vhost/131;
}
server {
listen 192.168.239.132:80 ;
server_name node1;
root /var/www/vhost/132;
}
}
2.基於端口
http {
server {
listen 192.168.239.131:80;
server_name node1;
root /var/www/vhost/80;
}
server {
listen 192.168.239.131:808;
server_name node1;
root /var/www/vhost/808;
}
}
3.基於域名
http {
server {
listen 192.168.239.131:80;
server_name vhost1;
root /var/www/vhost/vhost1;
}
server {
listen 192.168.239.131:80;
server_name vhost2;
root /var/www/vhost/vhost2;
}
}
4.混合形式
http{
server{
listen192.168.239.131:80 ;
server_name node1;
root /var/www/vhost/131_80;
}
server{
listen192.168.239.132:808 ;
server_name node1;
root /var/www/vhost/132_808;
}
}
http塊:能夠嵌套多個server,配置代理,緩存,日誌定義等絕大多數功能和第三方模塊的配置。如文件引入,mime-type定義,日誌自定義,是否使用sendfile傳輸文件,鏈接超時時間,單鏈接請求數等
server塊:配置虛擬主機的相關參數,一個http中能夠有多個server
若是server_name有多個,那麼經過代碼如$_SERVER["SERVER_NAME"]獲取的始終將是Nginx server_name配置中的第一個域名,第一個域名就至關於Apache虛擬主機配置中的ServerName,後面的域名就至關於Apache的ServerAlias。
若是nginx中有多個server塊,那麼請求匹配server_name的順序以下:
首先匹配準確的server_name,如:server_name test.com www.test.com;
而後匹配以*通配符開始的server_name,如:server_name *.test.com;
而後匹配以*通配符結束的server_name,如:server_name www.test.*;
最後匹配正則表達式形式的server_name,如server_name ~^(?<www>.+)\.test\.com$;
以上只有有一項匹配到之後就會中止搜索。
location塊:配置請求的路由,以及各類頁面的處理狀況
語法:location [ = | ~ | ~* | ^~ ] uri { ... } 或location @name {...}
注:uri: 要匹配的字符串 eg: /index.php /add/ /delete
= :對URI作精確匹配,請求的URI和patt如出一轍
^~:最長前綴匹配,不區分字符大小寫,不做正則匹配
~ :對URI作正則表達式模式匹配,區分字符大小寫
~*:對URI作正則表達式模式匹配,不區分字符大小寫
!~: 符合正則不匹配,不符合匹配
!~*: 符合正則不匹配,不符合匹配
不帶符號:普通匹配。
匹配優先級從高到低:=, ^~, ~/~*, 不帶符號
location命中過程:
1.先進性精準匹配,若是命中當即返回結果並結束解析的過程;
2.精準匹配未命中判斷普通匹配,若是命中多個會記錄下"最長的"命中結果,但不會結束解析;
3.繼續判斷正則匹配,按照正則匹配設置的規則正則表達式進行匹配,若是有多個正則匹配由上到下進行匹配,一旦匹配成功一個會當即返回結果並結束解析.
location = / {
proxy_pass http://tomcat:8080/index
} #網站首頁
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { //以xx結尾
root /webroot/res/;
} #網站靜態資源
location / {
proxy_pass http://tomcat:8080/
} #動態請求轉發
location ~ .*\.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
} #整合php,php文件給php處理
location 匹配,就是將不一樣請求導向到不一樣目錄或服務,或對該請求進行某些操做
匹配類型詳解:
(1) 普通匹配:就是字符串比較,包括:
精準匹配(=):請求的地址和location中uri如出一轍
最長前綴匹配(^~):匹配成功後繼續匹配,企圖獲得最長的匹配結果,不會進行正則匹配。
通用匹配(不帶修飾符):匹配成功後繼續匹配,保留最長的結果,有正則再正則匹配。匹配效率最低
(2) 正則匹配:字符串按正則規則比較,一旦匹配成功就結束匹配。~ 區分大小寫 ,~* 不區分大小寫,有這修飾符,則location中uri是正則表達式。
(3) 文件及目錄匹配:用於if(){…}中,if功能與location相似,做用域server,location。
-f和!-f用來判斷是否存在文件
-d和!-d用來判斷是否存在目錄
-e和!-e用來判斷是否存在文件或目錄
-x和!-x用來判斷文件是否可執行
例:
http{
include mime.types; #文件擴展名與文件類型映射表
default_type application/octet-stream; #默認文件類型,默認text/plain
#access_log off; #取消服務日誌
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定義日誌格式
access_log log/access.log myFormat; #combined爲日誌格式的默認值
sendfile on; #容許sendfile方式傳輸文件,默認爲off,能夠在http塊,server塊,location塊
sendfile_max_chunk 100k; #每一個進程每次調用傳輸數量不能大於設定的值,默認爲0,即不設上限
keepalive_timeout 65; #鏈接超時時間,默認爲75s,能夠在http,server,location塊
error_page 404 https://www.baidu.com; #錯誤頁
server{
keepalive_requests 120; #單鏈接請求上限次數。
listen 4545; #監聽端口
server_name 127.0.0.1 www.blog.com; #監聽地址,後面域名是別名
location ~*^.+$ {
#請求的url過濾,正則匹配,~爲區分大小寫,~*爲不區分大小寫,^~開頭不作正則匹配。
#root path; #站點根目錄
#index index.php index.html; #設置默認頁
proxy_pass http://mysvr; #請求轉向mysvr 定義的服務器列表
deny 127.0.0.1; #拒絕的ip
allow 172.18.5.54; #容許的ip
}
location 路徑2 {}
}
server{ …… }
}
(1) http配置詳解:
error_page 做用域:http server location 將某個錯誤重定向到某個頁面
語法:error_page code [=response] uri
code : 錯誤狀態碼
[=response]:要返回給客戶端的狀態碼,防止客戶端訪問該網頁發生錯誤代碼的時候被劫持,若省略,則客戶端狀態碼爲code
locastion / {
root /var/www/vhost/;
error_page 404 =200 /404.html
}
location /404.html {
root /etc/nginx/error_pages/;
index 404.html;
}
index 做用域:http server location 用於指定默認訪問資源(請求某個路徑時顯示的頁面)
語法 :index filename1 filename2 …
root 設置web資源的路徑映射;用於指明請求的URL所對應的文檔的目錄路徑,可用於http, server,location, if in location。就是將請求的目錄或文件指向服務器的某個目錄。
例:location /test/ {
root /usr/local/nginx/blog/;
index index.html;
}
若匹配成功,則請求將在服務器/usr/local/nginx/blog/目錄下查找test目錄。下面都能匹配:
www.blog.com:666/test/ 指向到/usr/local/nginx/blog/test/ 若設有index,則顯示主頁
www.blog.com:666/test/xxxx 指向到/usr/local/nginx/blog/test/xxxx 若沒有xxxx則404
server_tokens on | off | build | string 是否在響應報文的首部顯示nginx版本,默認是on,建議設置爲off,隱藏版本號
sendfile on | off; 是否啓用sendfile功能,在內核中封裝報文直接發送,速度更快,默認Off
tcp_nodelay on | off;在keepalived模式下的鏈接是否啓用TCP_NODELAY選項
當爲off時,延遲發送,合併多個請求後再發送,湊齊多個請求後在發送給後臺處理,可是這個狀況可能會致使客戶端等待,會比較慢,因此通常是不延遲發送,默認on時,不延遲發送
可用於:http,server, location
default_type text/html;設置默認文件類型
include 文件路徑; 引入配置文件
worker_processes 4; 配置ngxin的進程數,通常設爲CPU總核數
worker_connections 1024; 配置nginx容許單個進程併發鏈接的最大請求數
listen address[:port] [default_server][ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size];
注: address 能夠訪問該端口的ip/域名,不設則全部ip/域名可訪問
default_server設定爲默認虛擬主機
ssl限制僅可以經過ssl鏈接提供服務
backlog=number 超過併發鏈接數後,新請求進入後援隊列的長度
rcvbuf=size接收緩衝區大小
sndbuf=size 發送緩衝區大小
alias 做用域:location 不能與root同時存在 定義路徑別名
server{
listen80 ;
server_name node1;
location /admin/ {
alias /alias/;
}
/alias/ 是系統根目錄下的alias文件夾
keepalive_timeout 設定保持鏈接超時時長,0表示禁止長鏈接,默認爲75s,能夠調整短點
keepalive_requests 在一次長鏈接上所容許請求的資源的最大數量,默認爲100
keepalive_disable 對哪一種瀏覽器禁用長鏈接
send_timeout 向客戶端發送響應報文的超時時長,此處是指兩次寫操做之間的間隔時長
client_header_buffer_size 32k; #上傳文件大小限制
client_body_buffer_size 用於接收每一個客戶端請求報文的body部分的緩衝區大小;默認爲16k;超出此大小時,其將被暫存到磁盤上的由client_body_temp_path指令所定義的位置
large_client_header_buffers 4 64k; #設定請求緩
client_body_temp_path 設定用於存儲客戶端請求報文的body部分的臨時存儲路徑及子目錄結構和數量
語法: client_body_temp_path path [level1 [level2 [level3]]];
eg: client_body_temp_path /var/tmp/client_body 1 2 2
注: 1 1級目錄佔1位16進制,即2^4=16個目錄0-f
2 2級目錄佔2位16進制,即2^8=256個目錄00-ff
2 3級目錄佔2位16進制,即2^8=256個目錄00-ff
client_max_body_size 10m; 設置客戶端上傳文件大小,0表示不限制,做用域:http,server,location
limit_rate 限制響應給客戶端的傳輸速率,單位是bytes/second,默認值0表示無限制
limit_except 限制客戶端使用除了指定的請求方法以外的其它方法,只能在locatoin中使用
autoindex on; #開啓目錄列表訪問,合適下載服務器,默認關閉。
tcp_nopush on; #防止網絡阻塞
tcp_nodelay on; #防止網絡阻塞
keepalive_timeout 120; #長鏈接超時時間,單位是秒
#FastCGI相關參數是爲了改善網站的性能:減小資源佔用,提升訪問速度。
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;
#gzip模塊設置 做用域:http,server,location,if in location
gzip on; #開啓gzip壓縮輸出
gzip_min_length 1k; #最小壓縮文件大小
gzip_buffers 4 16k; #壓縮緩衝區,4塊,每塊16k
gzip_http_version 1.0; #壓縮版本(默認1.1,前端若是是squid2.5請使用1.0)
gzip_comp_level 2; #壓縮等級(1-9)
gzip_types text/plain application/x-javascript text/css application/xml;
#壓縮類型,默認就已經包含text/html,圖片,mp3,視屏不用壓縮。
gzip_vary on;
limit_zone crawler $binary_remote_addr 10m; #開啓限制IP鏈接數的時候須要使用
aio on | off | threads[=pool]; 是否啓用aio功能,默認是on
(2)nginx經常使用指令
1.break指令
使用環境:server,location,if;
該指令的做用是完成當前的規則集,再也不匹配後面規則。
2.if指令
使用環境:server,location
該指令用於檢查一個條件是否符合,若是條件符合,則執行大括號內的語句。If指令不支持嵌套,不支持多個條件&&和||處理。
3.return指令
語法:return code ;
使用環境:server,location,if;
該指令用於結束規則的執行並返回狀態碼給客戶端。
示例:若是訪問的URL以".sh"或".bash"結尾,則返回403狀態碼
location ~ .*\.(sh|bash)?$
{
return 403;
}
4.rewrite 指令
語法:rewrite regex replacement flag
使用環境:server,location,if
該指令根據表達式來重定向URI(能夠是一個http地址或文件),或者修改字符串(隱藏入口文件)。指令根據配置文件中的順序來執行。注意重寫表達式只對相對路徑有效。若是你想配對主機名,你應該使用if語句,示例以下:
if ( $host ~* www\.(.*) )
{
set $host_without_www $1;
rewrite ^(.*)$ http://$host_without_www$1 permanent;
}
flag: last 完成當前規則繼續匹配後面規則,還在當前域名
break 完成當前規則再也不匹配,直接跳轉
redirect 返回302,臨時重定向
permanent 返回301,永久重定向
5.Set指令
語法:set variable value ; 默認值:none; 使用環境:server,location,if;
該指令用於定義一個變量,並給變量賦值。變量的值能夠爲文本、變量以及文本變量的聯合。
示例:set $varname "hello world";
驚羣現象:一個網路鏈接到來,多個睡眠的進程被同事叫醒,但只有一個進程能得到連接,這樣會影響系統性能
3.3 nginx日誌
(1)日誌類型:access_log(訪問日誌) error_log(錯誤日誌)rewrite_log
訪問日誌:經過訪問日誌咱們能夠獲得用戶的IP地址、瀏覽器的信息,請求的處理時間等信息
錯誤日誌:記錄了訪問出錯的信息,能夠幫助咱們定位錯誤的緣由
重寫日誌:rewrite_log on; 它將發送全部的 rewrite 相關的日誌信息到 error_log 文件中,使用 [notice] 級別。隨後就能夠在error_log 查看rewrite信息了
(2)設置訪問日誌:
access_log指令的做用域分別有http,server,location,limit_except
access_log off; #表示關閉訪問日誌
access_log path [格式名 [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
注: path 指定日誌存放路徑
格式名 指定日誌格式,不寫則默認爲combined,使用自定義格式則寫上格式名引入
buffer 指定日誌寫入時的緩存大小
gzip 日誌寫入前先進行壓縮,指定壓縮比1-9,默認1,數值越大壓縮速度越慢
flush 設置緩存有效時間
if 條件判斷,若爲假則該請求不寫入日誌
例:access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m
默認的日誌格式:combined
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
自定義日誌格式:log_format 通常寫在http段中
log_format name [escape=default|json] string ...;
注: name 格式名
escape 設置字符中變量編碼方式是json仍是default,默認default
string 日誌格式字符串,參數中可以使用nginx變量
日誌格式相關變量:
$bytes_sent 發送給客戶端的總字節數
$body_bytes_sent 發送給客戶端的字節數,不包括響應頭的大小
$connection 鏈接序列號
$connection_requests 當前經過鏈接發出的請求數量
$msec 日誌寫入時間,單位爲秒,精度是毫秒
$pipe 若是請求是經過http流水線發送,則其值爲"p",不然爲「."
$request 完整的原始請求行,如 "GET / HTTP/1.1"
$request_length 請求長度(包括請求行,請求頭和請求體)
$request_time 請求處理時長,單位爲秒,精度爲毫秒,從讀入客戶端的第一個字節開始,直到把最後一個字符發送張客戶端進行日誌寫入爲止
$request_uri 完整的請求地址,如 https://daojia.com/
$status 響應狀態碼
$time_iso8601 標準格式的本地時間,形如「2017-05-24T18:31:27+08:00」
$time_local 通用日誌格式下的本地時間,如"24/May/2017:18:31:27 +0800"
$remote_addr 客戶端IP
$remote_user 客戶端用戶名稱,針對啓用了用戶認證的請求
$http_referer 請求的referer地址。
$http_user_agent 客戶端瀏覽器信息。
$http_x_forwarded_for 當前端有代理服務器時,設置web節點記錄客戶端地址的配置,此參數生效的前提是代理服務器也要進行相關的x_forwarded_for設置。即有負載均衡服務器時用此設置獲取客戶端ip
其它變量參見nginx官方文檔http://nginx.org/en/docs/varindex.html
注:當格式中某個變量爲空時,顯示:-
例: main格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'$upstream_addr $upstream_response_time $request_time ';
json格式:
log_format logstash_json '{"@timestamp":"$time_iso8601",'
'"host": "$server_addr",'
'"client": "$remote_addr",'
'"size": $body_bytes_sent,'
'"responsetime": $request_time,'
'"domain": "$host",'
'"url":"$request_uri",'
'"referer": "$http_referer",'
'"agent": "$http_user_agent",'
'"status":"$status",'
'"x_forwarded_for":"$http_x_forwarded_for"}';
(3)設置錯誤日誌:
做用域: http, server, location, mail, stream, main
error_log path [level];
注: path 日誌存儲的路徑
level 日誌級別,默認爲error
日誌級別:debug|info|notice|warn|error|crit|alert|emerg 級別從左到右依次變低,越低信息越少
open_log_file_cache off; 若是日誌文件路徑中有變量,則使用它設置日誌文件描述符緩存,提升性能
語法:open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
注: max 設置緩存中最多容納的文件描述符數量,若是被佔滿,採用LRU算法將描述符關閉
inactive 設置緩存存活時間,默認是10s
min_uses 在inactive時間段內,日誌文件最少使用幾回,該日誌文件描述符記入緩存,默認是1次
valid 設置多久對日誌文件名進行檢查,看是否發生變化,默認是60s
(4)日誌分割及備份
經過自定義腳本,完成日誌的分割和備份,使用定時任務,實現自動備份。
runlog.sh:
#!/bin/bash
LOGPATH=/usr/local/nginx/logs/blog.com.access.log #日誌文件位置
bak=/date/nginx_log/$(date -d yesterday +%Y%m%d%H%m).blog.com.access.log #備份的位置
mv $LOGPATH $bak #移動日誌文件,並重命名
touch $LOGPATH #新建日誌文件
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid) #使新建的日誌文件被nginx加載,nginx運行後以inode號加載日誌文件,只新建日誌文件不能被使用
定時任務:cron服務是Linux的內置服務,但它不會開機自動啓動
systemctl /start/stop/restart/reload crond
設置開機啓動:在 /etc/rc.d/rc.local 腳本中加入 /sbin/service crond start
查看當前用戶的定時任務:
crontab –l
查看日誌
tail
/var/log/cron
編輯定時任務:
crontab –e
刪除定時任務(所有):
crontab –r
編輯定時任務格式:
* * * * *
命令
#
注意
*
間有空格
分鐘 小時 日 月 星期
(0-59)(0-23)(1-31)(1-12)(0-6)
例:
0,30 18-23 * * * 18:00-23:00每間隔30分鐘執行
0 23 * * 6 星期6,23:00執行
* */1 * * * 每小時執行
* 23-7/1 * * * 23:00-7:00間每小時執行
0 4 1 jan * 一月一號4:00
0 0 10-20 * * 10號~20號,天天00:00執行
注意事項: 1.日誌備份目錄有可寫權限
2.腳本其餘用戶有可執行權限,755
3.4 部署TP框架
(1)先將tp源代碼下載到nginx目錄下
tp放到/usr/local/nginx/目錄下,root爲相對路徑,如:
tp在/usr/local/nginx/wwwroot/ 則 root wwwroot/public;
tp再也不nginx目錄,則使用alias 絕對路徑指定,不須要root。
注意:存放tp的目錄要有可執行權限,不然沒法進入目錄,訪問報403
(2)servr配置:
server {
listen 80;
server_name tp5.com;
access_log /data/wwwlogs/mit.520m.com.cn_nginx.log combined;
index index.html index.htm index.php;
root wwwroot/tp5;
location / { # /網站根目錄,全部請求都能匹配到這個路由
if (!-e $request_filename) { #若是請求的內容在nignx中不是一個文件或目錄
rewrite ^/(.*)$ /index.php/$1 last;
break;
}
} #隱藏入口文件
location ~ .*\.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
}
}
3.5 負載均衡配置
1.什麼是負載均衡:
將負載(工做任務)進行平衡、分攤到多個操做單元上進行運行,例如FTP服務器、Web服務器、企業核心應用服務器和其它主要任務服務器等,從而協同完成工做任務
2.實現的方式
(1)軟件:在一臺或多臺服務器相應的操做系統上安裝一個或多個附加軟件來實現負載均衡
一、基於DNS的負載均衡
因爲在DNS服務器中,能夠爲多個不一樣的地址配置相同的名字,最終查詢這個名字的客戶機將在解析這個名字時獲得其中一個地址,因此這種代理方式是經過DNS服務中的隨機名字解析域名和IP來實現負載均衡。
二、反向代理負載均衡(如Apache+JK2+Tomcat這種組合)
該種代理方式與普通的代理方式不一樣,標準代理方式是客戶使用代理訪問多個外部Web服務器,之因此被稱爲反向代理模式是由於這種代理方式是多個客戶使用它訪問內部Web服務器,而非訪問外部服務器。
三、基於NAT(Network Address Translation)的負載均衡技術
該技術經過一個地址轉換網關將每一個外部鏈接均勻轉換爲不一樣的內部服務器地址,所以外部網絡中的計算機就各自與本身轉換獲得的地址上的服務器進行通訊,從而達到負載均衡的目的。其中網絡地址轉換網關位於外部地址和內部地址之間,不只能夠實現當外部客戶機訪問轉換網關的某一外部地址時能夠轉發到某一映射的內部的地址上,還可以使內部地址的計算機能訪問外部網絡。
(2)硬件:安裝負載均衡器
因爲專門的設備完成專門的任務,獨立於操做系統,總體性能獲得大量提升,加上多樣化的負載均衡策略,智能化的流量管理,可達到最佳的負載均衡需求。
3.負載均衡算法:靜態/動態算法
一、輪詢法
輪詢法,就是將用戶的請求輪流分配給服務器,就像是挨個數數,輪流分配。這種算法比較簡單,他具備絕對均衡的優勢,可是也正是由於絕對均衡它必須付出很大的代價,例如它沒法保證分配任務的合理性,沒法根據服務器承受能力來分配任務。
二、隨機法
隨機法,是隨機選擇一臺服務器來分配任務。它保證了請求的分散性達到了均衡的目的。同時它是沒有狀態的不須要維持上次的選擇狀態和均衡因子[5]。可是隨着任務量的增大,它的效果趨向輪詢後也會具備輪詢算法的部分缺點。
三、最小鏈接法
最小鏈接法,將任務分配給此時具備最小鏈接數的節點,所以它是動態負載均衡算法。一個節點收到一個任務後鏈接數就會加1,當節點故障時就將節點權值設置爲0,再也不給節點分配任務。
4.nginx負載均衡配置
(1)創建鏈接池(負載均衡服務器)
upstream 鏈接池名 {
#ip_hash;
#fair; 服務器響應時間越短,優先分發
server 後端服務器名 [參數];
server 後端服務器名 [參數];
}
upstream 支持 輪詢,權重,ip哈希算法( 每一個請求按訪問ip的hash結果分配,這樣每一個訪客固定訪問一個應用服務器,能夠解決session共享的問題),做用域http
後端服務器名:ip 域名 端口號
參數:
weight=1 權重,權重和訪問比率成正比,用於應用服務器性能不均的狀況
down 永久離線,標記壞掉的服務器
max_fails=1 容許請求失敗的次數,默認1
fail_timeout max_fails次請求失敗後,暫停的時間
backup 該臺服務器備份用,其它服務器宕機後請求它
(2)在虛擬主機中使用鏈接池
server {
listen 80;
server_name www.blog.com;
location / {
proxy_pass http://鏈接池名;
proxy_ser_header Host $host;
proxy_ser_header X-Real-IP $remote_addr;
proxy_ser_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}