一、http事務簡明
request: <method> <URL> <VERSION> MHADERS <body> response: <version><status><reason phrase> <HEADERS> ... <body>
status:
1xx:信息類
2xx:成功類,200
3xx:重定向,301,304,302
4xx:錯誤類,客戶端錯誤,404,403
5xx:錯誤類, 服務端錯誤,502
認證:basic,digest
httpd;MPM
prefork,:進程模型,兩級結構,主進程master負責生成子進程,每個進程負責響應一個請求;
worker:線程模型,三級結構,主進程生成子進程,子進程負責生成多個線程, 每個線程響應一個請求
event:主進程master負責生成子進程,每個子進程響應多個請求,基于事物管理;
I/O模型;
同步:synchronous
異步:asynchronous
關注的是消息通知機制;
消息通知:
同步:等待對方返回消息;
異步; 被調用者能過狀態,通知或回調通知調用者
狀態:調用者每隔一段時間就需要檢查一次;
阻塞/非阻塞
調用者等待結果返回之前年處的狀態;
阻塞:block調用結果返回之前,調用者會被掛起;
非阻塞:nonblock調用結果返回之前,調用者不會被掛起
I/O:
網絡IO:本質是socket讀??;
磁盤IO:流;
每次IO,都不會經由兩個階段 ;
第一步; 數據先回載至內核內存空間;
第二步; 數據從內核緩沖區復制到用戶空間的進程的內存中付出 ;
等待數據準備完成;
數據內核復制進程 ;
二、Nginx簡明:
特性:
采用模塊化設計,較好的擴展性;
高可靠性 master/worker
支持熱部署:不停機更新配置文件、更換日志文件、列新服務器版本
低內存消耗:10000個keep-alive連接模式下的非活動連接僅消耗2.5M內存;
event-dreiven,aio,mmap
基本功能;
靜態資源的web服務器
http協議反向代理服務器;
pop3/imap4協議反向代理服務器;
FastCgi,uWSCGI等協議;
模塊化(非DSO),有zip,ssl,…;
web服務器相關的功能;
虛擬主機、keepalive、訪問日志、url rewrite 、路徑別名、基于ip及用戶的訪問控制;
支持速率限制及并發數限制,…;
Nginx的程序架構:
master/worker
一個master進程,可生成一個或多個worker進程;
master;加載配置文件、管理worker進程、平滑升級、…
worker:http服務、http代理、fstcgi代理 …
緩存對象的相關數據
cache loader 載入緩存對象
cache manager 管理緩存對象
模塊類型
核心模塊;core module
標準模塊: Standard HTTP modules Optional HTTP moduels Mail modules 3rd party modules ;
nginx一般用于靜態資源的web服務器 http協議反向代理
nginx高度模塊:高度模塊化,但其模塊早期不支持DSO機制; 近期版本支持動態裝載和動態卸載
nginx的功用;
靜態的web資源服務器; (圖片服務器,或js/css/html/txt等靜態的資源服務器)
結合FastCGI/uwCGI/SCGI等協議反代動態資源請求
http/https協議的反向代理 ;
imap4/pop3協議的么向代理 ;
tcp/udp協議的請求轉發;
三、LNMP環境的搭建 (nginx+php-fpm):基于fastcgi
CGI全稱為公共網關接口(Common Gateway Interface)
php-fpm 工作方式:(類似于httpd的prefork)
listen=127.0.0.1:9000
listen.allowed_clients=127.0.0.1
pm=dynamic |static
pm.start_servers:啟動fpm進程時啟動的工作進程數量;
pm.min_spare_server:最少空閑進程數;
pm.max_children:最大工作進程數;
user=USERNAME
group=GROUPNAME
fastcgi模塊指令;
fastcgi_pass address;
address是fpm服務器監聽的地址和端口;
示例:fastcgi 127.0.0.1:9000;
fastcgi_index name; fastcgi應用的主面名稱;
fastcgi_param parameter avlue [if_not_empty];
傳遞給fpm服務器的參數及其值
path:文件系統路徑,用于存儲緩存的文件數據 ;
max_size=size:定義此路徑下的多大空間用于存儲緩存數據 ;
levels=#[:#[:#]]:緩存目錄層級定義;
levels=1:2
key_zone=name:size
內存中用于緩存k/v映射關系的空間名稱及大小;
inactive=time
注意:只能定義在httpd上下文;
fastcgi_cache zone | off;
是否啟用cache,如果啟用;
fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=fcgicache:10m;
在location中調用;
fastcgi_cache fcgicache;
fastcgi_cache_key string;
定義要使用的緩存鍵;
例如:fastcgi_cache_key $request_uri;
fastcgi_cache_methods GET | HEAD |POST…;
緩存哪些類型的請求的相關數據;
fastcgi_cache_min_users number;
fastcgi_cache_valid [code…] time;
對不同響應碼設定其可緩存時長;
注意:調用緩存時,至少應該指定三個參數;
fastcgi_cache
fastcgi_cache_key
fastcgi_cache_valid
配置拓撲
安裝:
# yum -y install php-fpm php-mysql php-mbstring php-gd php-xml nginx mariadb # rpm -ql php-fpm 可以查看其生成的文件 # systemctl start php-fpm mariadb nginx # vim /etc/nginx/conf.d/defult.conf 修改 location / { root /usr/share/nginx/html; index index.html index.htm index.php; }
添加
location ~ \.php$ { root /usr/share/nginx/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/$fastcgi_script_name; include fastcgi_params; }
# vim /usr/share/nginx/html/index.php <h1>www.rj.com NODE2</h1> <?php $link=mysql_connect("localhost","root","centos.123"); if(!$link)echo"CNONNECT FILED!"; else echo "CAN CNONNECT !"; ?>
訪問http://172.16.23.10/index.php后可以看到CAN CNONNECT字樣時,表示php可以正常解析,并能夠連接到mysql
下載wordpress-4.3.1-zh_CN.zip # cp wordpress-4.3.1-zh_CN.zip /usr/share/nginx/html/ # cd /usr/share/nginx/html/ # unzip wordpress-4.3.1-zh_CN.zip # cp -a ./wordpress/* . # cp wp-config-sample.php wp-config.php -a mysql> CREATE DATABASE word; mysql> GRANT ALL ON word.* TO 'rj'@'localhost' IDENTIFIED BY 'centos'; mysql> GRANT ALL ON word.* TO 'rj'@'127.0.0.1' IDENTIFIED BY 'centos'; # vim wp-config.php 修改以下字段 define('DB_NAME', 'word'); /** MySQL數據庫用戶名 */ define('DB_USER', 'rj'); /** MySQL數據庫密碼 */ define('DB_PASSWORD', 'centos'); /** MySQL主機 */ define('DB_HOST', 'localhost'); /** 創建數據表時默認的文字編碼 */ define('DB_CHARSET', 'utf8'); /** 數據庫整理類型。如不確定請勿更改 */ define('DB_COLLATE', '');
而后輸入以下地址進行安裝http://172.16.23.10/wp-admin/
安裝完之后,訪問可得到以下結果
這樣wordpress就可以安裝成功了;
四、nginx https的實現,并為之提供phpmyadmin
生成自簽證明證書
# touch /etc/pki/CA/index.txt # echo 01 > /etc/pki/CA/serial # cd /etc/pki/CA/ # (umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048) # cd /etc/pki/ca/private/ 注:此處的國家為CN 、省份為BJ 、 城市為BJ 公司為rj 部門為rj 主機名為www.rj.com # opessl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem 生成證明請求 # mkdir /etc/nginx/ca # (umaask 066;openssl genrsa -out /etc/nginx/ca/nginx.key 1024) 注:此處所要填寫的內容前四項要與之對應一致,主機名要與使用的主機名一致 # openssl -req -new -key /etc/nginx/ca/nginx.key -out nginx.csr -days 3650 自簽名 # openssl -ca in /etc/nginx/ca/nginx.csr -out /etc/nginx/ca/nginx.crt -days 3650
如以下所示便生成了自簽名的證書
在windows中測試時需要導入證書
# sz /etc/pki/CA/cacert.pem
在windows將cacert.pem重命名為cacert.crt
配置nginx
vim /etc/nginx/conf.d/openssl.conf server { listen 443 ssl; server_name www.rj.com:441; ssl on ; ssl_certificate /etc/nginx/ca/nginx.crt; ssl_certificate_key /etc/nginx/ca/nginx.key; location / { root /usr/share/nginx/ssl; index index.html index.htm index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/ssl; } location ~ \.php$ { root /usr/share/nginx/ssl; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/ssl/$fastcgi_script_name; include fastcgi_params; } } # ssl -tnl 查看443端口是否啟用 開始初裝phpmyadmin # cp phpMyAdmin-4.0.5-all-languages.zip /usr/share/nginx/ssl/ # unzip phpMyAdmin-4.0.5-all-languages.zip # cp config.sample.inc.php config.inc.php -a 此時直接訪問會報錯的 vim /etc/php.ini進行配置 修改以下字段 session.save_path = "/var/lib/php/session" session.auto_start = 1 # chmod 0777 /var/lib/php/session/ # chown nginx:nginx /var/lib/php/session
此時訪問http://www.rj.com 時為wordpress
當訪問https://www.rj.com時為phpmyadmin
原創文章,作者:kang,如若轉載,請注明出處:http://www.www58058.com/79178