碎碎念
location里面有特殊的定义变量的方式,可以在location里面直接调用,而在命令行或者脚本里面则无法调用
作用:使location具有通用性
[root@web02 ~]# cat /etc/nginx/fastcgi_params #代理PHP的代码
[root@web01 /code]# ll /etc/nginx/uwsgi_params #代理Python
nginx中无论是静态请求还是动态请求,都不能直接请求数据库,要经PHP代码的解析
php是一种代码解析器 中间商
PHP PHP代码
Tomcat Java代码
resin Java代码
python Python代码
rpm -Uvh 安装本地的rpm包 = yum locainstall -y
依赖包可能会冲突,如果冲突的话,先yum remove -y 就好
php-fpm 是PHP的进程管理命令
/etc/php-fpm.conf 管理PHP进程的配置文件
/etc/php-fpm.d
/etc/php-fpm.d/www.conf
/etc/php.ini
SUN公司 java mysql
oracle(甲骨文公司)
9000 php
3306 mysql
111 rpcbind
80 nginx默认
22 ssh
53 DNS
fastcgi和http和https一样,都是一种协议,只不过http是浏览器使用的协议,fastcgi是web服务器和数据库之间使用的协议
所谓的协议也就是调制解调中使用的规则
nginx里配置的是主机地址,而不是域名服务器 如需测试域名,请修改host文件 如需让别人能访问你的域名,需要购买域名 跟配置nginx无关系
回送地址:127.0.0.1。一般用于测试使用。例如:ping 127.0.0.1 来测试本机TCP/IP是否正常。
作用:
:一是测试本机的网络配置,能PING通127.0.0.1说明本机的网卡和IP协议安装都没有问题
:某些SERVER/CLIENT的应用程序在运行时需调用服务器上的资源,一般要指定SERVER的IP地址,但当该程序要在同一台机器上运行而没有别的SERVER时就可以把SERVER的资源装在本机,SERVER的IP地址设为127.0.0.1也同样可以运行
localhost的来说,实质上就是指向127.0.0.1这个本地IP地址。在操作系统中有个配置文件(windows中路径为C:WINDOWSsystem32driversetchosts,Unix/Linux路径为/etc/hosts)将localhost与127.0.0.1绑定在了一起
“ping 127.1”和“ping 127.0.0.1”这两条命令是一样的,都是在进行回路测试
location的指向和精确,特殊符号指定站点目录,浏览器URI指定文件
nginx上可以使用PHP的语法,打印出和他连接的PHP的详细信息(要他的简历),但是不能解析.php代码(做他做的事)
location之间可以自动跳转的(比如WordPress访问.php文件的时候),原理是对于某些条件的判断,可以在文件中指定某些跳转,可以说nginx,计算机都是有一层一层的判断组成的
/code/wordpress/wordpress_dir/index.php,wp软件包里面以.php结尾的文件,都是配置用户登录信息的文件,可以通过浏览器直接访问location(别的后缀不能访问)
#127.0.0.1和IP之间的关系
[root@web01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
图形化的作用仅仅是为了人民更好的理解而已,本质上还是对系统文件的修改
502 nginx服务器找不到后端主机(PHP)
不同的服务有不同的报错默认页面,这些报错的反馈页面的可以修改的
nginx通过开发写的代码连接缓存,数据库
nginx使用fastcgi代理,通过开发写的代码,连接PHP,通过开发写的代码,连接缓存,数据库
syntax #语法错误
错误反馈可以用状态码表示,也可以使用语句,图片,不同的服务报错不同
创建多个目录作为站点目录
GET 请求
post 上传
client_max_body_size 500M; #修改nginx默认上传文件的大小
.php文件直接放在站点目录下,这样在浏览器直接访问域名的话可以直接跳转到相关的php文件
有的时候nginx配置文件有问题,状态码是200
index控制默认访问文件,URI控制访问哪个文件
LNMP环境准备
使用浏览器百度,可以自己找指定版本的源
find /var/cache/yum/x86_64/7/ -name ''*.rpm"
1.配置nginx官方源
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
2.创建nginx的默认启动用户
groupadd www -g 666
useradd www -u 666 -g 666 -s /sbin/nologin -M
3.下载官方nginx
yum install -y nginx
4.修改nginx配置文件
sed -i '/^user/c user www;' /etc/nginx/nginx.conf
[root@web01 ~]# vim /etc/nginx/nginx.conf (二选一)
user www;
5.启动,加入开机自启动
systemctl start nginx
systemctl enable nginx
6.使用第三方扩展源安装php7.1
#先卸载系统自带的php5.4
[root@nginx ~]# yum remove -y php-mysql-5.4 php php-fpm php-common
#配置第三方源,下载指定版本的php(7.1)
[root@nginx ~]# vim /etc/yum.repos.d/php.repo
[php-webtatic]
name = PHP Repository
baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/
gpgcheck = 0
[root@nginx ~]# yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb
考虑的网速的原因,可以选择本地上传
[root@web01 ~/nginx_php]# rpm -Uvh ./*
查看PHP版本
[root@web02 php]# rpm -q php71w-mysqlnd
php71w-mysqlnd-7.1.33-1.w7.x86_64
7.配置php-fpm用户与Nginx的运行用户保持一致,不修改的话,nginx连不上PHP
sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf
sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf
8.启动php-fpm加入开机自启
systemctl start php-fpm
systemctl enable php-fpm
9.安装Mariadb数据库(#安装mariadb客户端,server服务端,使用依赖的方式安装服务端)
yum install mariadb-server -y
10.启动Mariadb加入开机自动
systemctl start mariadb
systemctl enable mariadb
11.给Mariadb配置登陆密码
mysql #使用web连接数据库(刚下载好的可以直接连接,给root用户密码之后就不能连接了)
mysqladmin -uroot password syy123 给mysql root用户密码(不能重复给密码)(选做)
mysql -uroot -psyy123 #使用web连接数据库(使用root身份)
create database xx; #创建数据库
show databases; #查看数据库
grant all on wp.* to wp_user@'localhost' identified by '1';(%,10.0.0.%,localhost,10.0.0.7)
这一步,是创建 库wp的用户,指定使用密码
select user,host from mysql.user; #查看 数据库用户身份创建成功
show tables; 查看表前缀
12.检查进程和端口
ps -ef|grep -E 'nginx|php|mysql'
netstat -lntup|grep -E '80|9000|3306'
mysql语句通常以;结尾,安装好的数据库,会有4个系统库
13.检查nginx和PHP,PHP和mysql数据库能不能连接
[root@web01 ~]# which php-fpm
#php服务管理工具,可以直接调用PHP解析器,解析代码,连接数据库,返回数据给web,返回数据给用户
/usr/sbin/php-fpm
[root@web01 ~]# which php
/usr/bin/php
[root@web01 ~]# yum provides php-fpm
[root@web01 ~]# ps -ef|grep php
root 868 1 0 21:36 ? 00:00:00 php-fpm: master process (/etc/php-fpm.conf)
apache 1181 868 0 21:36 ? 00:00:00 php-fpm: pool www
#nginx内置PHP变量
[root@web01 ~]# vim /etc/nginx/scgi_params #scgi代理配置文件,代理PHP
scgi_param REQUEST_METHOD $request_method; #请求的动作(GET,POST)
scgi_param REQUEST_URI $request_uri; #请求的地址不带参数
scgi_param QUERY_STRING $query_string; #请求的参数;如?
scgi_param CONTENT_TYPE $content_type; #请求头中的Content-Type字段
scgi_param DOCUMENT_URI $document_uri; #与$uri相同
scgi_param DOCUMENT_ROOT $document_root; ##网站的根目录,在server配置中root指令中指定的值(站点目录)
[root@web01 ~]# vim /etc/nginx/fastcgi_params
fastcgi_param QUERY_STRING $query_string; #请求的参数;如?
fastcgi_param REQUEST_METHOD $request_method; #请求的动作
fastcgi_param CONTENT_TYPE $content_type; #请求头中的Content-Type字段
fastcgi_param CONTENT_LENGTH $content_length; #请求头中的Content-length字段。
fastcgi_param SCRIPT_NAME $fastcgi_script_name; ##脚本名称
[root@web02 php]# ll /etc/php-fpm.conf #PHP的启动进程文件
-rw-r--r-- 1 root root 4207 Oct 26 2019 /etc/php-fpm.conf
[root@web02 php]# ll /etc/php-fpm.d #
-rw-r--r-- 1 root root 17962 May 20 23:15 www.conf #PHP服务的配置文件
[root@web02 php]# ll /etc/php.ini #跟PHP代码程序相关的文件
-rw-r--r-- 1 root root 62641 Oct 26 2019 /etc/php.ini
[root@web01 ~]# vim /etc/nginx/conf.d/default.conf
#该文件记录着PHP默认的location配置,可以使用这个location让nginx与PHP建立连接,PHP可以直接解析代码,也可以作为中介,建立起nginx和mysql数据库之间的连接,(为了让用户在浏览器上可以直接看到内容 )
#location ~ .php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
[root@web02 ~]# rpm -q mariadb
mariadb-5.5.65-1.el7.x86_64
[root@web02 ~]# rpm -ql mariadb
/etc/my.cnf.d/client.cnf #mysql数据库的配置文件
/usr/bin/aria_chk
/usr/bin/aria_dump_log
/usr/bin/aria_ftdump
/usr/bin/aria_pack
/usr/bin/aria_read_log
/usr/bin/msql2mysql
/usr/bin/my_print_defaults
/usr/bin/mysql #可以TAB和使用相对路径执行
/usr/bin/mysql_find_rows
/usr/bin/mysql_waitpid
/usr/bin/mysqlaccess
/usr/bin/mysqladmin
/usr/bin/mysqlbinlog
/usr/bin/mysqlcheck
/usr/bin/mysqldump
/usr/bin/mysqlimport
/usr/bin/mysqlshow
/usr/bin/mysqlslap
[root@web02 php]# ll /etc/nginx/uwsgi_params #代理Python
-rw-r--r-- 1 root root 664 Apr 21 23:07 /etc/nginx/uwsgi_params
[root@web02 ~]# ll /var/lib/mysql/mysql.sock #与数据库的本地连接有关
srwxrwxrwx 1 mysql mysql 0 May 21 00:38 /var/lib/mysql/mysql.sock
fastcgi_pass 127.0.0.1:9000; #这一行的作用就是告诉web PHP服务器在哪,只有在这里指定了IP,nginx才能找到PHP服务器,解析.php代码,直接反馈给用户看,
关于php的location站点目录下的info.php文件,可以用来判断nginx服务端有没有连接到php,同时打印出PHP的详细信息
LNMP架构环境配置
ngx_http_fastcgi_module模块
作用:nginx服务可以使用ngx_http_fastcgi_module模块将请求发送到支持ngx_http_fastcgi_module模块服务器
127.0.0.0.1=localhost=本机ip
测试web能不能连接PHP
访问cs.php.com---找到/php/index.php(优先级低)----跳转到location ~ .php$(代理php)---解析/php/index.php---调用数据库---反馈给用户
index.php 该文件是用户注册使用的文件(可以跳转)
wp-settings.php 配置软件的文件
nginx搭载的网站中,运行的软件绝大多数都是以.php结尾的文件,要想使用这些软件,就需要fastcgi代理到PHP,不然nginx自身无法直接使用.php文件(在/etc/nginx/mime.types中指定了),接会下载
fastcgi_pass 127.0.0.1:9000; php搭载在哪,就用谁的IP
1.
vim /etc/nginx/conf.d/php.conf
server {
listen 80;
server_name cs.php.com;
root /php;
index index.php;
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
#fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
index后面的文件的后缀无所谓,重要的是文件中的内容,因为内容中可以指定解码方式
浏览器默认使用HTML语法解码文件,如果想要浏览器解码.php的文件,编辑的文件中一定要告诉浏览器,不然浏览器就用HTML语法解析
nginx总是尽量的去显示网站中文件的内容,不能显示就下载
index后面只是一个页面而已,用不用无所谓
打印出的PHP信息表,Variables里面记录了指定的server语句中的变量的调用信息
如果使用浏览器能打开PHP的信息表,那么说明nginx和PHP建立了连接
使用变量的好处就是,简单的写法调用的站点目录下的所有的文件(调用变量,定位URI)
index index.php; 该文件主要起一个跳转的作用(如果直接输入域名访问的话是403)
在这里指定fastcgi_index 其实是没有用的,因为前面的location ~* .php$已经把“/结束”这种情况排除了
SCRIPT_FILENAME=SCRIPT_NAME
#fastcgi_index index.php; 这个文件尽量写上
2.重载nginx配置文件
nginx -sreload
3.创建站点目录
mkdir /php
4.使用PHP语法打印出PHP的详细信息 ###PHP语法很严格,不能随便加空格和TAB键(该文件通用)
vim /php/index.php #改文件名随意,放在index后面哪个位置都行(是默认不默认的关系,index.php优先,不考虑第一位的话)
<font color="red">syy</font>
<?php
phpinfo();
?>
5.域名解析
10.0.0.7 cs.php.com
6.浏览器访问cs.php.com和cs.php.com/info.php #小心报错File not found.
7.删除PHP信息打印(危险的文件)
rm -rf /php/index.php
部署WordPress
1.nginx具体配置信息
vim /etc/nginx/conf.d/wp.conf
server {
listen 80;
server_name cs.wp.com;
root /wp;
index info.php index.php;
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
2.重载nginx服务
nginx -sreload
3.获取wordpress产品,解压并部署wordpress
[root@nginx ~]# mkdir /wp
[root@nginx ~]# cd /wp
#三选一
[root@nginx ~]# http://test.driverzeng.com/Nginx_Code/wordpress-5.0.3-zh_CN.tar.gz
[root@nginx wordpress]# wget https://cn.wordpress.org/wordpress-5.0.3-zh_CN.tar.gz
[root@nginx code]# wget https://cn.wordpress.org/latest-zh_CN.tar.gz
[root@nginx ~]# tar xf wordpress-5.0.3-zh_CN.tar.gz
[root@nginx ~]# chown -R www.www /wp
4.由于wordpress产品需要依赖数据库,所以需要手动建立数据库(#)
mysql -uroot -psyy123
create database wp; #创建数据库(类似于目录)
show databases; #查看数据库(类似于查看文件)
exi或者q或者quit或者Ctrl+c或者Ctrl+d
grant all on wp.* to wp_user@'localhost' identified by '1';
5.域名解析
10.0.0.7 cs.wp.com
6.通过浏览器访问wordpress,并部署该产品
cs.wp.com
判断PHP和数据库是否 连接
查看nginx能不能连接PHP和数据库
php本身不能和数据库连接,是通过开发写的文件中的代码实现和数据库的连接
wp-config.php 这个文件就是把用户的注册设置记录到数据库的(连接)
localhost代表本机,如果数据库在别的服务器,那么就写对应的IP
1.PHP所在的服务器
在/wp目录下创建mysqli.php文件,填入对应的数据库IP、用户名、密码
vim /wp/mysqli.php
<?php
$servername = "localhost";
$username = "wp_user";
$password = "1";
// 创建连接
$conn = mysqli_connect($servername, $username, $password);
// 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "小哥哥,php可以连接MySQL...";
?>
<img style='100%;height:100%;' src=https://blog.driverzeng.com/zenglaoshi/php_mysql.png>
2.
浏览器访问 www.wp.com/mysql.php
3.为了数据库的安全
rm -rf /code/php/php_dir/mysqli.php
部署知乎产品Wecenter
1.nginx具体配置信息
vim /etc/nginx/conf.d/we.conf
server {
listen 80;
server_name cs.we.com;
root /zh;
index index.php index.html;
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
2.重启nginx服务
[root@http-server ~]# nginx -sreload
3.创建站点目录
mkdir /zh
4.下载Wecenter产品,部署Wecenter并授权
[root@web02 ~]# wget http://test.driverzeng.com/Nginx_Code/WeCenter_3-2-1.zip
[root@web02 ~]# unzip WeCenter_3-2-1.zip
[root@web02 ~]# mv WeCenter_3-2-1/ /zh
[root@web02 ~]# chown -R www.www /zh
5..由于wecenter产品需要依赖数据库, 所以需要手动建立数据库
#1.登陆数据库
[root@http-server ~]# mysql -uroot -psyy123
#2.创建wordpress数据库
MariaDB [(none)]> create database zh;
MariaDB [(none)]> exit
6.域名解析
10.0.0.7 cs.zh.com
7.通过浏览器访问网站
cs.zh.com