LNMP环境配置

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

 1.5.3 php-fpm 定义 open_basedir

原文地址:https://www.cnblogs.com/Job123/p/12132122.html