一、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.178linux.com/79178