LAMP与LNMP 不同之处Nginx,N比A在静态上厉害 ,在动态上A比N厉害。
1.1 安装mysql 与lamp一样
1.2 安装php 与之前编译不同
(1)下载 wget 解压 tar
(2)编译
./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --disable-ipv6 --with-pear --with-curl --with-openssl
(3)安装
make && make install
(4)修改配置文件
cp php.ini-production /usr/local/php-fpm/etc/php.ini
vim /usr/local/php-fpm/etc/php-fpm.conf 写入
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
[www]
listen = /tmp/php-fcgi.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
检验配置是否正确
/usr/local/php-fpm/sbin/php-fpm -t
successful 成功 !!!
(5)启动php-fpm
cp /usr/local/src/php-5.6.36/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod 755 /etc/init.d/php-fpm
useradd -s /sbin/nologin php-fpm
service php-fpm start
设置php-fpm开机启动
chkconfig php-fpm on
检测php-fpm是否启动
ps aux |grep php-fpm
会显示二十多个进程
1.3安装Nginx
(1)下载wget 解压 tar
(2)配置编译
./configure --prefix=/usr/local/nginx
(3)安装
make && make install
(4)编写启动脚本
vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 30 21
# description: http service.
# Source Function Library
. /etc/init.d/functions
# Nginx Settings
NGINX_SBIN="/usr/local/nginx/sbin/nginx"
NGINX_CONF="/usr/local/nginx/conf/nginx.conf"
NGINX_PID="/usr/local/nginx/logs/nginx.pid"
RETVAL=0
prog="Nginx"
start()
{
echo -n $"Starting $prog: "
mkdir -p /dev/shm/nginx_temp
daemon $NGINX_SBIN -c $NGINX_CONF
RETVAL=$?
echo
return $RETVAL
}
stop()
{
echo -n $"Stopping $prog: "
killproc -p $NGINX_PID $NGINX_SBIN -TERM
rm -rf /dev/shm/nginx_temp
RETVAL=$?
echo
return $RETVAL
}
reload()
{
echo -n $"Reloading $prog: "
killproc -p $NGINX_PID $NGINX_SBIN -HUP
RETVAL=$?
echo
return $RETVAL
}
restart()
{
stop
start
}
configtest()
{
$NGINX_SBIN -c $NGINX_CONF -t
return 0
}
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
restart
;;
configtest)
configtest
;;
*)
echo $"Usage: $0 {start|stop|reload|restart|configtest}"
RETVAL=1
esac
exit $RETVAL
更改文件权限
chmod 755 /etc/init.d/nginx
chkconfig --add nginx
chkconfig nginx on
(5)更改Nginx的配置文件
清空原来配置文件
> /usr/local/nginx/conf/nginx.conf
写下内容
vim /usr/local/nginx/conf/nginx.conf
user nobody nobody;
worker_processes 2;
error_log /usr/local/nginx/logs/nginx_error.log crit;
pid /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 6000;
}
http
{
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 3526;
server_names_hash_max_size 4096;
log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
' $host "$request_uri" $status'
' "$http_referer" "$http_user_agent"';
sendfile on;
tcp_nopush on;
keepalive_timeout 30;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
connection_pool_size 256;
client_header_buffer_size 1k;
large_client_header_buffers 8 4k;
request_pool_size 4k;
output_buffers 4 32k;
postpone_output 1460;
client_max_body_size 10m;
client_body_buffer_size 256k;
client_body_temp_path /usr/local/nginx/client_body_temp;
proxy_temp_path /usr/local/nginx/proxy_temp;
fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
fastcgi_intercept_errors on;
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_comp_level 5;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css text/htm
application/xml;
server
{
listen 80;
server_name localhost;
index index.html index.htm index.php;
root /usr/local/nginx/html;
location ~ .php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
}
}
}
检查是否正确
/usr/local/nginx/sbin/nginx -t
正确 。
(6)启动Nginx
service nginx start
// 如果启动失败
检查nginx是否启动 ps aux |grep nginx
没有启动成功
发现80端口被占用
查看80端口
kill -9 端口号杀死进程
杀光80端口进程之后 重新启动
成功!
再查看Nginx是否启动成功
成功!
(7)测试是否能解析php
创建文件 编写内容
解析正常!
1.4Nginx配置
(1)默认虚拟主机
// 第一个被Nginx加载的虚拟主机就是默认主机。但是可以标记,也就是被标记的主机就是默认虚拟主机,没有标记第一个虚拟主机就是默认虚拟主机。
修改主配置文件在nginx.conf中加入如下
//意思就是在/usr/local/nginx/conf/vhost下所有文件都以.conf结尾的文件都加载
所有的虚拟主机配置文件都放在vhost目录下
vim default.conf 写入
检查是否正确 -t
重新加载文件 -s reload
echo "default_server" > /data/nginx/default/index.html //创建索引页
访问
访问一个没有定义过的域名,也会访问aaa.com
(2)用户认证
重建文件 vim test.com.conf 写入如下
创建用户密码
htpasswd -c /usr/local/nginx/conf/htpasswd aaa
检测 -t 重新加载 -s reload
mkdir /data/nginx/test.com //创建文件写入内容
echo "test.com" > /data/nginx/test.com/index.html
curl
回401需要用户认证
在hosts加入192.168.200.17 test.com
浏览器访问
针对某个目录 需要修改location
访问admin目录需要密码
访问test.com正常
(3) 域名重定向
与httpd相似但是更容易理解,改写如下
server_name后面可以跟多个域名,permanent为永久重定向,相当于httpd的301,这里用到的是redirect,相当于httpd的R=302.
检查错误-t 重新加载文件-s reload
curl
(4) 访问日志
查看Nginx的日志格式
$remote_addr 为访问网站的用户的出口IP; $http_x_ forwarded_ for 为代理服务器的IP,如果使用了代理,则会记录代理的IP; $time_local为当前的时间; $host为访问的主机名; $request_uri为访问的URL地址; $status 为状态码; $http_ referer 为referer地址; $http_ user _agent为user_ agent。
写入如下 access_log /tmp/1.log combined_realip;
查看
日志切割脚本
1.4.5配置静态文件不记录日志并添加过期时间
修改如下
location~可以指定对应静态文件,expires配置过期时间,access_log配置为off就可以不记录访问日志。
检测错误 -t 重新加载 -s reload
建立js jpg 和对比的jss文件
curl测试 //Cache-Control是对应时间
查看日志 发现只记录了 jss文件
1.4.6 Nginx防盗链
修改配置文件为
访问其他网址403无法访问,允许的访问成功。
1.4.7 访问控制
限制IP
allow允许 deny 拒绝
限制admin目录只允许192.168.200.17访问 其他的都拒绝
| 表示分隔符 或者的意思 意思是可以访问带有abc或image的字符串,并且是PHP的请求拒绝访问。
也可以针对的user_augent中 ~意思是匹配号,只要u中含有S Y T字符串的都拒绝,return 403 是直接返回403,也可以是别的。
1.4.8 Nignx解析PHP
PHP配置
test.com.conf中
fastcgi_pass用来指定php-fpm,这个地址一定要和php-fpm服务监听的地址匹配
1.4.9Nginx代理
如果Nginx中有多台Web服务器,如果同时代理,那么Nginx在这里起到一个负载均衡的作用。vim proxy.conf 写入如下内容
Proxy_pass指定要代理的域名所在的服务器的IP
后三行为定义发往后端Web服务器的请求头,第二行必须有,表示后端Web服务器的域名和当前配置文件中的server_name保持一致,三四行是日志格式。
验证加载
安装dig yum install -y bind-utils
dig查看对应域名的IP
可以看到是有两个IP,都可以访问www.baidu.com
curl 测试
配置负载均衡
vim /usr/local/nginx/conf/vhost/load.conf 写入
验证重新加载 curl测试
这是自己的虚拟机可以访问www.baidu.com.这个就是代理的作用。
1.4.10 Nignx配置SSL
自定义生成一对ssl证书
配置如下
生成key文件(私钥) 2048是加密字符串的长度,输入密码
把刚生成的tmp.key转换成aminglinux.key 目的是删除刚才设置的密码,如果key文件有密码,则必须在Nginx加载它的时候输入它的密码,很不方便
这一步是生成证书请求文件,并不是公钥,但是必须有这个文件,要用key文件和这个csr文件一起生成最终的公钥文件。
这样最终生成了crt证书,也就是公钥。
这样的目的就是生成aminglinux.key和aminglinux.crt两个文件,用这两个文件配置Nginx,
vim /usr/local/nginx/conf/vhost/ssl.conf
保存之后 检查配置出错。因为Nginx并不支持ssl,所以重新编译安装
再次测试 并创建对应的目录和测试文件
在hosts中写入
192.168.200.17 aming.com
用浏览器访问
会提示不安全,因为是自己制作的所以没有浏览器的认可。
1.5 php-fpm的配置
1.5.1php-fpm的pool
Nginx可以配置多个虚拟主机,php-fpm也同样可以配置多个pool
编辑如下 加入include一行
创建配置文件目录和子配置文件
mkdir /usr/local/php-fpm/etc/php-fpm.d
vim www.conf
vim aming.conf
这样就有两个pool,第一个pool监听/tmp/www.sock 第二个监听/tmp/aming.sock
检查一下配置
重启下一php-fpm服务
查看/tmp/目录下sock文件
1.5.2 php-fpm 的慢执行日志
vim www.conf