Nginx+PHP+MySql环境配置
博客地址:https://m0ng0lfalcon.github.io/
Linux 环境配置
借鉴自:https://www.cnblogs.com/hangzhounec/p/9152604.html
一、Linux 的安装
-
镜像的准备
xubuntu-18.04.2-desktop-i386.iso
-
开始安装
选择英文版的安装
-
一路按默认的进行。
-
正式安装
- 安装完成
二、Nginx 的安装
-
命令安装:
sudo apt-get install nginx
-
修改 Nginx 配置文件
sudo vim /etc/nginx/sites-available/default
-
修改如下内容
- 修改41行:
修改配置文件1.png
- 修改41行:
- 修改 56 ~ 63 行
修改配置文件2.png
-
重启 Nginx 服务
sudo service nginx restart
-
测试 Nginx
成功.png
三、php 安装
-
命令安装
sudo apt-get install php7.2 php7.2-fpm php7.2-mysql
-
修改 php 配置文件
sudo vim /etc/php/7.2/fpm/pool.d/www.conf
-
修改一下内容,修改 37 行
修改配置文件.png
-
重启php服务
sudo service php7.0-fpm start
-
测试php服务
-
在
/var/www
文件夹下创建info.php -
输入一下代码
<?php phpinfo(); ?>
-
在浏览器打开:
php配置成功.pnglocalhost/info.php
-
四、MySQL 安装
-
命令安装
sudo apt-get install mysql-server mysql-client
-
更新密码:
sudo mysql use mysql; update mysql.user set authentication_string=PASSWORD('New_Password'), plugin='mysql_native_password' where user='root'; # 这一步主要是在设置新密码的时候,顺便把用户root的plugin进行修改,修改为默认的 mysql_native_password,然后在刷新权限设置。 flush privileges;
-
重启 MySQL 服务
sudo service mysql restart
-
测试 MySQL
-
在
/var/www
文件夹下创建mysql.php -
输入一下代码:
<?php echo '<h1>Page loaded with PHP!</h1>'; $conn = mysqli_connect('localhost', 'site_admin', 'your_password'); if(!$conn){ die('<h2>Error: </h2>' . mysqli_connect_error()); }else{ echo '<h2>Successfully Connected to MySQL Database!</h2>'; } ?>
-
浏览器打开:
mysql成功链接.pnglocalhost/mysql.php
-
五、Nginx 安全加固
借鉴自:https://blog.51cto.com/purplegrape/1651656
-
备份
/etc/nginx/sites-available/default
-
屏蔽IP (屏蔽除中国以及美国以外的IP)
if ( $geoip_country_code !~ ^(CN|US)$ ) { return 403; }
-
封杀各种user-agent
if ($http_user_agent ~* "java|python|perl|ruby|curl|bash|echo|uname|base64|decode|md5sum|select|concat|httprequest|httpclient|nmap|scan" ) { return 403; } if ($http_user_agent ~* "" ) { return 403; }
-
封杀特定的url
特定的文件扩展名,比如.bak
location ~* \.(bak|swp|save|sh|sql|mdb|svn|git|old)$ { rewrite ^/(.*)$ $host permanent; }
知名程序,比如phpmyadmin
location /(admin|phpadmin|status) { deny all; }
-
封杀特定的http方法和行为,比如
if ($request_method !~ ^(GET|POST|HEAD)$ ) { return 405; } if ($http_range ~ "\d{9,}") { return 444; }
-
url 参数过滤敏感字,比如
if ($query_string ~* "union.*select.*\(") { rewrite ^/(.*)$ $host permanent; } if ($query_string ~* "concat.*\(") { rewrite ^/(.*)$ $host permanent; }
Windows下的环境配置
一、Nginx的安装
借鉴自:https://www.cnblogs.com/jiangwangxiang/p/8481661.html
-
到官网http://nginx.org/下载最新的稳定版本:
nginx 下载.png
- 下载之后解压,得到如下:
-
启动Nginx:
- 双击nginx.exe运行
- 命令行输入
start nginx 或者 nginx.exe
-
检查是否启动:
浏览器输入
安装成功.pnghttp://localhost:80
-
关闭Nginx:
-
Nginx命令:
nginx -s stop(快速停止nginx) 或 nginx -s quit(完整有序的停止nginx)
-
taskkill命令:
taskkill /f /t /im nginx.exe
-
Nginx命令:
二、php的安装
借鉴自:https://www.cnblogs.com/wwjchina/p/9804576.html
-
下载最新版的 php
-
解压:
解压后.png
-
进行配置 :
-
找到php.ini-development拷贝一份,并且重命名为php.ini
-
打开php.ini
-
搜索extension_dir配置项,去掉前面的分号:
;
,并且把内容改成php目录下的ext的绝对路径,例如:C:\Wnpm\php-7.3.7\ext
-
- 搜索cgi.fix_pathinfo配置项,同样去掉分号,设置为1
> `cgi.fix_pathinfo`是用来设置在cgi模式下PHP是否提供PATH_INFO信息。因为nginx默认不会设置PATH_INFO的值,所以需要通过上面的方法来提供。
三、配置 Nginx + php
-
修改Nginx的配置文件
-
打开Nginx文件夹,conf里的nginx.conf
-
修改如下内容
配置文件1.png
-
下划线部分改成自己放置网站的目录
配置文件2.png
先把前面的#号给去掉,下划线部分改成自己放置网站的目录
-
在Windows下开启Nginx&PHP服务比较麻烦,所以我们需要用到RunHiddenConsole来隐藏运行我们的Nginx服务跟PHP服务。
下载地址:http://www.inbeijing.org/wp-content/uploads/2015/06/RunHiddenConsole.zip
创建两个 bat 文件
start.bat
@echo off REM Windows 下无效 REM set PHP_FCGI_CHILDREN=5 REM 每个进程处理的最大请求数,或设置为 Windows 环境变量 set PHP_FCGI_MAX_REQUESTS=1000 echo Starting PHP FastCGI... RunHiddenConsole C:\Wnpm\php-7.3.7\php-cgi.exe -b 127.0.0.1:9000 -c C:\Wnpm\php-7.3.7\php.ini echo Starting nginx... RunHiddenConsole C:\Wnpm\nginx-1.16.0\nginx.exe -p C:\Wnpm\nginx-1.16.0
stop.bat
@echo off echo Stopping nginx... taskkill /F /IM nginx.exe > nul echo Stopping PHP FastCGI... taskkill /F /IM php-cgi.exe > nul exit
-
测试php服务
在网站目录下创建phpinfo.php文件
<?php phpinfo(); ?>
在浏览器打开
配置成功.pnglocalhost/phpinfo.php
四、安装MySQL
借鉴自:https://www.runoob.com/mysql/mysql-install.html
-
下载MySQL
-
解压后放到适当的位置,我放到了Nginx跟php的同级目录,目录结构:
目录结构.png
-
在mysql-8.0.17文件夹创建配置文件
[client] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] # 设置3306端口 port = 3306 # 设置mysql的安装目录 basedir=C:\\Wnpm\\mysql-8.0.17 # 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错 # datadir=C:\\web\\sqldata # 允许最大连接数 max_connections=20 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB
-
给Windows添加环境变量:
-
初始化数据库
mysqld --initialize --console
-
得到初始化密码
!QsgoT9)8fS2
-
启动MySQL服务
这里有一点要注意:管理员运行cmd
-
登陆MySQL
mysql -h 主机名 -u 用户名 -p
参数说明:
- -h : 指定客户端所要登录的 MySQL 主机名, 登录本机(localhost 或 127.0.0.1)该参数可以省略;
- -u : 登录的用户名;
- -p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。
因为是本机
mysql -u root -p
用刚刚得到的密码登陆
登陆.png
更改root的默认密码:
password.png
语法:
格式:mysqladmin -u用户名 -p旧密码 password 新密码
例子:mysqladmin -uroot -p123456 password 123
-
测试MySQL
测试代码:
<?php echo '<h1>Page loaded with PHP!</h1>'; $conn = mysqli_connect('localhost', 'root', 'root'); if(!$conn){ die('<h2>Error: </h2>' . mysqli_connect_error()); }else{ echo '<h2>Successfully Connected to MySQL Database!</h2>'; } ?>
返回结果:
成功.png