LNMP环境搭建

Nginx

​ Nginx 是高性能的 HTTP 和反向代理的服务器,处理高并发能力是十分强大的,能经受高负载的考验。Nginx就是在tomcat之前加了一成东西,通过这个东西我们可以控制对tomcat的访问

安装mysql

 

与lamp安装mysql的步骤大体相同

先解压软件包 移动 创建mysql用户 创建datadir用来放数据库文件 更改权限

# tar -zxvf mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz

# mv mysql-5.6.43-linux-glibc2.12-x86_64 /usr/local/mysql

# cd /usr/local/mysql/

# useradd -s /sbin/nologin mysql

# mkdir -p /data/mysql

# chown -R mysql:mysql /data/mysql/

使/data/mysql目录的用户名和组名都改为mysql并分配所有权限

#yum install –y perl-Module-Install

# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql/’’

在MySQL数据库程序的保存目录scripts内找到一个名为mysql_install_db的脚本程序,执行这个脚本程序并使用–user参数指定MySQL服务的对应账号名称(在前面步骤已经创建),使用–basedir参数指定MySQL服务程序的保存目录,使用–datadir参数指定MySQL真实数据库的文件保存目录,这样即可生成系统数据库文件,也会生成出新的MySQL服务配置文件。

执行脚本程序并使用-user以mysql用户运行 使用-datadir指定mysql真实数据库的文件保存目录为/data/mysql

#echo $?

0

# cp support-files/my-default.cnf /etc/my.cnf

# cp support-files/mysql.server /etc/init.d/mysqld

把程序目录中的开机程序文件复制到/etc/init.d目录中,以便通过service命令来管理MySQL数据库服务程序。

# chmod 755 /etc/init.d/mysqld

# vi /etc/init.d/mysqld

datadir = /data/mysql

# chkconfig --add mysqld            把mysqld服务加入到系统服务列表中

# chkconfig  mysqld on              开机自启

[root@localhost php-5.6.30]# service mysqld start       启动服务

Starting MySQL SUCCESS!

[root@localhost src]# netstat -ntpl |grep mysqld

tcp6       0      0 :::3306                 :::*                    LISTEN      2987/mysqld  

mysql启动成功

.安装PHP

在lnmp中 php以一个服务php-fpm形式出现 独立存在于linux系统 方便管理

解压软件包 创建用户 用来运行php-fpm服务 安装需要的软件包

# tar -zxvf php-5.6.30.tar.gz

# useradd -s /sbin/nologin php-fpm

#yum install -y openssl openssl-devel freetype freetype-devel libxml2-devel libpng libpng-devel libjpeg libjpeg-devel libcurl-devel gcc gcc-c++

#yum install -y epel-release

#yum install -y libmcrypt-devel

# cd php-5.6.30

# ./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

编译php服务源码包时,除了定义要安装到的目录以外,还需要依次定义配置php服务程序配置文件的保存目录、mysql数据库服务程序所在目录、mysql数据库服务程序配置文件所在目录,以及libpng、jpeg、freetype、zlib等服务程序的安装目录路径,并通过参数启动php服务程序的诸多默认功能

make && make install          编译并安装php

# echo $?

0

cp php.ini-production /usr/local/php-fpm/etc/php.ini

将php服务程序目录中相应的配置文件复制过来

vi /usr/local/php-fpm/etc/php-fpm.conf

php-fpm.conf是php服务程序重要的配置文件之一,编辑pid文件保存目录,错误日志

[root@localhost php-5.6.30]# /usr/local/php-fpm/sbin/php-fpm -t

[10-Dec-2020 10:17:27] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

配置妥当后便可把用于管理php服务的脚本文件复制到/etc/init.d中.为了能够执行脚本,把脚本赋予755权限。

# cp /usr/local/src/php-5.6.30/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

# chmod 755 /etc/init.d/php-fpm

启动php-fpm

# service php-fpm start

最后把php-fpm服务程序加入到开机启动项中

#chkconfig php-fpm on

# ps aux |grep php-fpm

安装nginx

#tar –zxvf nginx-1.12.2.tar.gz

cd nginx-1.12.2

./configure --prefix=/usr/local/nginx

make && make install

# vi /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

RETAVL=$?

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

清空原来的配置文件

#> /usr/local/nginx/conf/nginx.conf

#vi /usr/local/nginx/conf/nginx.conf 添加如下内容

[root@localhost nginx-1.12.2]# /usr/local/nginx/sbin/nginx –t检验配置文件是否有错

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[root@localhost nginx-1.12.2]# service nginx start                 启动服务

Starting nginx (via systemctl):  Warning: nginx.service changed on disk. Run 'systemctl daemon-reload' to reload units.         此次报错运行systemctl daemon-reload 即可

[  OK  ]

[root@localhost nginx-1.12.2]# systemctl daemon-reload

[root@localhost nginx-1.12.2]# service nginx start

Starting nginx (via systemctl):  [  OK  ]                启动成功

# ps aux |grep nginx

测试解析php

#vi / usr/local/nginx/html/1.php

<?php

echo "test php scripts.";

?>

# curl localhost/1.php

成功解析php

默认虚拟主机

#vi /usr/local/nginx/conf/nginx.conf     添加如下内容

include vhost/*.conf;

/usr/local/nginx/conf/vhost下所有以.conf结尾的文件都会加载 我们就可以把所有虚拟主机配置文件放到vhost目录下了

#mkdir /usr/local/nginx/conf/vhost

#cd /usr/local/nginx/conf/vhost/

# vi default.conf             添加如下内容

server

{

listen 80 default_server;

server_name aaa.com;

index index.html index.htm index.php;

root /data/nginx/default;

}

# /usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

# /usr/local/nginx/sbin/nginx -s reload

#echo "default_server" > /data/nginx/default/index.html

创建索引页

用户认证

创建新的虚拟主机

#vi 1111.com.conf       编辑如下内容

server

{

listen 80;

server_name 1111.com;

index index.html index.htm index.php;

root /data/nginx/1111.com;

location /

{

auth_basic              "Auth";                                 打开认证

auth_basic_user_file    /usr/local/nginx/conf/htpasswd;         指定用户密码文件

}

}

#yum install –y httpd

#htpasswd -c /usr/local/nginx/conf/htpasswd sym    创建用户并设置密码

#/usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

# /usr/local/nginx/sbin/nginx -s reload

创建目录并写入内容

#mkdir /data/nginx/1111.com        

# echo "111111.com" > /data/nginx/1111.com/index.html

#curl –I –x127.0.0.1 1111.com

状态码为401说明网站需要验证

进入浏览器输入1111.com发现需要用户名和密码

域名重定向

#vi /usr/local/nginx/conf/vhost/1111.com.conf 添加如下内容

server_name后可以跟多个域名 permanent为永久重定向

if ($host != '1111.com') {

rewrite ^/(.*)$ http://1111.com/$1 permanent;

}

重新启动服务

#/usr/local/nginx/sbin/nginx –t

#/usr/local/nginx/sbin/nginx –s reload

#curl –x127.0.0.1:80 www.1111.com/1.html

HTTP/1.1 301 Moved Permanently

Server: nginx/1.12.2

Date: Fri, 11 Dec 2020 10:15:19 GMT

Content-Type: text/html

Content-Length: 185

Connection: keep-alive

Location: http://1111.com/1.html

状态码为301 且最后一行告诉原域名为1111.com

nginx的访问日志

#vi /usr/local/nginx/conf/vhost/1111.com.conf 添加如下内容

access_log /tmp/1.log combined_realip;

access_log用来指定日志的存储路径为/tmp/1.log      combined_realip为日志格式名字

#/usr/local/nginx/sbin/nginx –t

#/usr/local/nginx/sbin/nginx –s reload

#curl –x127.0.0.1:80 1111.com/1456

查看日志

cat /tmp/1.log

可以看到我们之前做的域名跳转和刚才的404

 

 

 

配置静态文件不记录日志并添加过期时间

#vi /usr/local/nginx/conf/vhost/1111.com.conf 添加如下内容

//location ~可以指定对应的静态文件

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

{

//expires为过期时间

expires         7d;

//access_log off 可以不记录访问日志

access_log      off;

}

 

location ~ .*\.(js|css)$

{

expires         12h;

access_log      off;

}

#/usr/local/nginx/sbin/nginx –t

#/usr/local/nginx/sbin/nginx –s reload

echo "1111111111" > /data/nginx/1111.com/1.js

echo "2222222222" > /data/nginx/1111.com/2.jpg

touch /data/nginx/1111.com/1.jss

分别curl 1111.com/1.js    1111.com/2.jpg   1111.com/1.jss

查看日志

cat /tmp/1.log

.jpg和.js都没有记录在日志中

 

防盗链

#vi /usr/local/nginx/conf/vhost/1111.com.conf 添加如下内容

location ~ .*\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$

{

expires         7d;

valid_referers none blocked server_names *.1111.com;

If ($invalid_referer){

return 403;

}

access_log off;

}

#/usr/local/nginx/sbin/nginx –t

#/usr/local/nginx/sbin/nginx –s reload

有防盗链的 显示403 禁止访问

没有防盗链的 则正常显示200

访问控制

使访问admin目录的请求只允许192.168.200.10访问

#vi /usr/local/nginx/conf/vhost/1111.com.conf 添加如下内容

location /admin/

{

allow 192.168.200.10;                   //允许192.168.200.10访问

deny all;                                      //拒绝其他ip访问

}

#/usr/local/nginx/sbin/nginx –t

#/usr/local/nginx/sbin/nginx –s reload

#mkdir /data/nginx/1111.com/admin  

# echo "123" > /data/nginx/1111.com/admin/1.html

可以通过192.168.200.10正常访问admin下的文件 其他的则403禁止访问

只拒绝少数ip

#vi /usr/local/nginx/conf/vhost/1111.com.conf 添加如下内容

location /admin/

{

deny 192.168.200.10;           //拒绝192.168.200.10访问

}

#/usr/local/nginx/sbin/nginx –t

#/usr/local/nginx/sbin/nginx –s reload

结果显而易见

黑名单

#vi /usr/local/nginx/conf/vhost/1111.com.conf 添加如下内容

//禁止访问admin目录或upload目录下的html文件

location ~ .*(admin|upload)/.*\.html$            

{

deny all;

}

#/usr/local/nginx/sbin/nginx –t

#/usr/local/nginx/sbin/nginx –s reload

状态码403禁止访问

两个ip都无法访问admin目录下的1.html文件

 

nginx解析php

在lnmp中php是以一个服务的形式存在的 即:php-fpm 首先要启动php-fpm服务 然后nginx再和php-fpm通信 也就是说通过php-fpm完成php脚本解析 nginx只作为用来传输的工具

#vi /usr/local/nginx/conf/vhost/1111.com.conf 添加如下内容

location ~ \.php$

{

include fastcgi_params;

fastcgi_pass unix:/tmp/php-fcgi.sock;               //指定php-fpm地址

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /data/nginx/1111.com$fastcgi_script_name;

}

vi /data/nginx/1111.com/1.php

<?php phpinfo(); ?>

成功解析

nginxssl

https通信过程需要一套数字证书 通过客户端验证通过才可以继续访问网页 证书可以自己制作 也可以向组织申请这套证书就是一对公钥和私钥 也就是我们接下来要做的ssl证书

#cd /usr/local/nginx/conf

这一步生成key文件就是私钥

这一步是把tmp.key转换成sym.key 目的是展出刚才设置的密码

# rm -f tmp.key

这一步是生成证书请求文件 但并不是公钥 我们要用key文件和这个csr文件一起生成最终的公钥文件  其中Common Name为后面配置nginx配置文件的server_name

成功生成了CRT证书

# vi /usr/local/nginx/conf/vhost/ssl.conf      //添加如下内容

server

{

listen 443;

server_name sanym.com;      

index index.html index.php;

root /data/nginx/sanym.com;

 

ssl on;

ssl_certificate sym.crt;

ssl_certificate_key sym.key;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

 

location ~ \.php$

{

include fastcgi_params;

fastcgi_pass unix:/tmp/php-fcgi.sock;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /data/nginx/sanym.com$fastcgi_script_name;

}

access_log /tmp/1.log combined_realip;

}

检查配置是否有问题

发现当前nginx并不支持ssl 重新编译一下

# cd /usr/local/src/nginx-1.12.2

# ./configure --prefix=/usr/local/nginx/ --with-http-ssl-module

#make && make install

编译完成后再次检验

#mkdir /data/nginx/sanym.com

# echo "<?php phpinfo(); ?>" > /data/nginx/sanym.com/1.php

#/etc/init.d/nginx restart

在浏览器输入http://sanym.com/1.php会提示不安全

因为我们自己做的证书没有得到浏览器的认可

php-fpm配置

之前说过nginx中php作为独立服务 那么它必然有自己的配置文件 php-fpm的配置文件为/usr/local/php-fpm/etc/php-fpm.conf 它同样支持include语句

php-fpmpool

#vi /usr/local/php-fpm/etc/php-fpm.conf 填入如下内容

include = etc/php-fpm.d/*.conf

创建配置文件目录和子配置文件

#mkdir /usr/local/php-fpm/etc/php-fpm.d

# cd /usr/local/php-fpm/etc/php-fpm.d/

# vi www.conf

[www]

listen = /tmp/www.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

# vi sanym.conf

[sanym]

listen = /tmp/sanym.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

这样就有了两个子配置文件 也就是有了两个pool 第一个pool监听/tmp/www.sock 第二个pool监听/tmp/sanym.sock                  这样就可以在nginx不用的虚拟主机中调用不同的pool 从而达到相互隔离的目的 两个pool互不影响

验证一下配置是否有问题 并重启php-fpm服务

[root@localhost vhost]# /usr/local/php-fpm/sbin/php-fpm -t

[11-Dec-2020 05:46:38] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

[root@localhost vhost]# /etc/init.d/php-fpm restart

Gracefully shutting down php-fpm . done

Starting php-fpm  done

查看/tmp目录下的sock文件

[root@localhost vhost]# ls /tmp/*.sock

/tmp/mysql.sock  /tmp/php-fcgi.sock  /tmp/sanym.sock

出现了我们前面建的两个sock文件

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值