nginx-php-mysql

碎碎念

127.0.0.1

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:\WINDOWS\system32\drivers\etc\hosts,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

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='width: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
posted @ 2020-05-21 18:57  看萝卜在飘  阅读(560)  评论(0编辑  收藏  举报