1、HTTP请求的报文
1)、请求行: get 从服务器获取数据
post 写入数据到服务器
2)、请求头:
主要包括:主机信息host
用户代理:比如 IE Chrome等
3)、空行:
用来区分请求头和请求主体
4)、请求主体:
get方法时:没有主体
post方法:有具体的请求主体内容
2、HTTP的响应报文
1)、起始行
状态码 返回请求的结果
200 正常
301 永久重定向
302 临时重定向
403 禁止访问 请求合法,预先设置的规则拒绝访问
404 服务器无法找到对应的请求资源
500 内部服务错误
2)、响应头
主要包括:server 服务的名字
字符编码 比如utf-8
context-type 比如 text/html
3)、响应主体
HTML内容
curl -v XX.XX.COM 查看1个访问网站的详细过程
3、HTTP的资源信息
URL:统一资源定位符
URI:统一资源标识符
举例:www.test.com/ceshi/1
URL / URI
资源分为静态资源和动态资源
静态资源:内容时死的,无法交互,请求的内容不会动态变化
动态资源;内容时可改变的,灵活多变。
4、cookie:标识用户身份信息,保存在用户客户端
session:记录用户的一些会话操作 eg:记录用户登录信息
UV 记录独立访问用户的数目
PV:页面访问量
5、网站并发
服务器单位时间内能够处理的最大连接数
6、常用的网站服务软件
处理静态资源的服务:
apache:
安装方式:yum install -y httpd
Nginx:
处理动态资源的服务:
PHP:
Tomcat(java)
Python:
7、安装nginx
01 yum安装
①、从官方安装
先创建官方repo
/etc/yum.repos.d/nginx.repo
内容:
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/
r
e
l
e
a
s
e
v
e
r
/
releasever/
releasever/basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
yum install nginx -y
②、从第三方库安装
02、编译安装
①、wget http://nginx.org/download/nginx-1.18.0.tar.gz
解决依赖:openssl-devel pcre-devel
②、解压tar xf nginx-1.18.0.tar.gz
③、./configure
--prefix=PATH 指定程序安装的目录
--user=USER 设置虚拟用户管理进程
--group=GROUP 设置虚拟用户组管理进程
make install
03、启动nginx
systemclt start nginx
04、常用文件的位置
/etc/logrotate.d/nginx 日志轮转配置文件(内容就是普通的logorate配置类试)
/etc/nginx/* 配置文件
/nginx.conf 主配置文件
/nginx.d/default 扩展配置文件
/var/log/nginx 日志文件
/usr/bin/nginx 命令文件
/usr/share/nginx/html 站点目录
05、主配置文件nginx.conf详解
user www; #指定worker进程管理用户
worker_processes 1; #定义有几个worker进程 建议==CPU核数
error_log /var/log/nginx/error.log warn; #定义错误日志
pid /var/run/nginx.pid; #定义pid文件路径信息
events {
worker_connections 1024; #1个worker的最大同时的连接数
}
http {
include /etc/nginx/mime.types; #加载1个配置文件
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#定义日志的格式
access_log /var/log/nginx/access.log main; #定义日志存储目录
sendfile on;
#tcp_nopush on;
keepalive_timeout 65; #超时时间
#gzip on;
include /etc/nginx/conf.d/*.conf; #加载1个配置文件
}
06、扩展配置文件nginx.d/default详解 (虚拟主机配置文件)
server {
listen 80; #指定端口号
server_name localhost; #指定域名
location / {
root /usr/share/nginx/html; #指定站点目录
index index.html index.htm; #指定首页文件
}
location /test { #站点目录下必须有test目录,首页文件放在test目录下
root /usr/share/nginx/html; #指定站点目录
index index.html index.htm; #指定首页文件
}
error_page 500 502 503 504 /50x.html; #优雅显示页面信息
location = /50x.html {
root /usr/share/nginx/html;
}
}
测试配置文件:nginx -t 测试配置文件是否有语法错误
07、nginx进程
master process 主进程 管理服务正常使用
worker process 工作进程 处理用户的访问
08、常见错误可能原因
404 错误
1)、修改配置文件中的location
2)、在站点目录创建相应的目录或文件
403 错误
1)、不要禁止访问
2)、没有首页文件
500 内部服务错误
1)、内部程序代码编写问题
2)、程序服务中文件权限不正确
502、网关错误
1)、PHP服务异常
数据库连接异常
检查数据库服务
09、搭建多个网站
1)、在/etc/nginx/conf.d/ 下创建多个.conf文件 里面写入server信息
2)、创建站点目录和目录下的文件
10、虚拟主机访问的方式
1)、基于域名的方法
2)、基于地址的方法
修改主配置文件
在后面的inculde /etc/nginx/conf.d/*.conf;上面加上需要优先访问的conf文件
举例:inculde /etc/nginx/conf.d/www.conf; 表明先看www.conf配置的地址
当服务器有多个地址时,需要指定某个地址来负责监听客户端的响应
方法:listen 80;————> 10.0.0.131:80 这种方式来解决
PS:nginx涉及到地址修改必须restart重启,reload重启不生效
3)、基于端口的方法
修改 listen 80---> 8080
11、虚拟主机安全访问限制
举例:限制IP地址访问
location / {
deny 10.0.0.132;
allow 10.0.0.0/24;
allow 172.16.1.0/24;
allow 2001:0db8::/32;
deny all;
}
12、用户认证访问
location / {
auth_basic "closed site"; #开启认证功能
auth_basic_user_file /etc/nginx/password/passwd; #加载用户密码文件 可以用相对路径或者绝对路径 建议相对路径
}
需要创建password/passwd的文件 密码信息必须是密文的
htpasswd -c ./htpasswd test 交互的方式生成加密密码
htpasswd -bc ./htpasswd test 123456 免交互的方式生成密码
-c 创建密码文件
修改密码文件的权限 chmod 600 ./htpasswd chown nginx htppasswd #因为客户访问过来就会压缩成nginx用户(配置文件配置的),密码文件必须给nginx权限
curl X.X.com -u user:passwd
13、nginx搭建文件共享服务器
1)、编写配置文件
server {
listen 80; #指定端口号
server_name localhost; #指定域名
location /filedir {
root /usr/share/nginx/html; #指定站点目录
auotindex on; #开启目录索引功能
#index index.html index.htm; #指定首页文件
charset utf-8; #解决乱码问题
}
同时要保证/usr/share/nginx/html/filedir下没有index.html文件,否则默认会显示这个首页文件
2)、PS:服务器目录共享出来的文件,有可能会被浏览器识别,而不会下载
因为:/etc/ngingx/mime.types 里面的所写的文件格式nginx默认会识别。
3)、解决服务器目录中文乱码问题:
加上 charset utf-8 字段 见1)的举例。
14、配置文件别名功能
server_name www.test.com test.com
注意要配置好解析信息C:\Windows\System32\drivers\etc\hosts
15、nginx的状态模块监控网站状态
location = /web_status {
stub_status;
}
结果显示如下:
Active connections: 4 #激活的连接数信息
server accepts handled requests
8 8 3
发送的连接数 处理的连接数 接收的连接总数
Reading: 0 Writing: 1 Waiting: 3
nginx正在读取请求报文的数量 nginx正在响应的报文数量 等待响应的数量
16、nginx日志
在/etc/nginx/nginx.conf下
error_log /var/log/nginx/error.log warn;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
格式里面难以理解的:http_referer 记录访问者的链接信息
17、错误页面优雅显示
location /test {
error_page 404 /test.jpg
}
一定要有对应的目录和文件
18、location的匹配
1)、精准匹配 优先级最高
location = / {
}
2)、默认匹配 优先级最低
location / {
}
3)、目录匹配 优先级第三
location /documents/ {
}
4)、优先匹配 优先级第二
location ^~ /images/ {
}
5)、不区分大小写匹配 优先级第三
location ~* \. (gif|jpg|png) {
}
19、页面跳转设置
方法1:新写1个server,设置要跳转的配置
server {
listen 80; #指定端口号
server_name www.test1.com; #指定域名
rewrite ^(.*)$ /www.test.com/$1 break;
}
^ 表示匹配/前面的URL,(.*)表示匹配后面的任意字符
方法2:使用判断语句来进行跳转
if ($host ~* "^www.test.com$")
rewrite ^(.*)$ /www.test.com/$1 break;
PS:curl -Lv xx.xx.com 可以查看多次跳转之后的最后页面
20、LNMP架构
L:linux系统
注意: selinux fw必须关闭 /tmp目录权限1777
N:nginx服务 处理静态资源
M:mysql服务
P:PHP 处理动态资源
部署:
1)、安装数据库软件
yum install -y mariadb-server mariadb -y
2)、给数据库root账户设置密码
mysqladmin -u root password 'root'
登录:mysql -u root -proot
3)、启动数据库服务
systemctl start mariadb.service
systemctl enable mariadb.service
21、部署PHP服务
1)、卸载系统自带的PHP
yum remove php-mysql php php-fpm php-common
2)、安装PHP软件(需要更新yum源)
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum install -y 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
3)、编写配置文件
vim /etc/php-fpm.d/www.conf
user = www
ps:尽量保持nginx和php的用户保持一致
4)、启动PHP服务
systemctl start php-fpm
systemctl enable php-fpm
22、LNMP架构原理
nginx(fastcgi_pass)--FastCGI-->(php-fpm -- warpper )--php解析器--SQL
23、实现LNMP之间建立关系(见网站)
1)、实现ngnix+php建立关系
编写nginx配置文件
location ~ \.php$ {
root /usr/share/nginx/html/blog;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #nginx传递给php时 需要携带完整的php文件的目录
fastcgi_pass 127.0.0.1:9000; #本地主机的PHP服务
include fastcgi_params;
}
2)、实现PHP+SQL建立联系
24、代码上线
1)、Git获取
2)、开源网站代码
www:www.dedecms.com
bbs:www.discuz.net/forum.php
blog:cn.wordpress.org
wecenter:www.wecenter.com/?copyright
3)、将下载后的代码放入站点目录
PS:yum -y install lrzsz 可以通过rz命令快捷复制文件到系统
PS:注意如果源目录有内容,注意备份
4)、修改站点目录权限
chown -R www.www 站点目录
5)、在sql里面创建数据库wordpress
mysql -uroot -proot
create database wordpress;
创建SQL用户名和授权
grant all on wordpress.* to 'wordpress'@'%' identified by 'wordpress';
库.表 用户 %表示所有主机可以连接 密码
6)、网站www.blog.com (记得配置hosts)进行傻瓜式配置
7)、安装到最后登陆时会出现403错误
解决方案;修改/etc/nginx/conf.d/blog.conf文件
在location / 内的 index 新增加:index.php 这样匹配的时候会访问index.php 从而匹配下面的location
server {
listen 80;
server_name www.blog.com;
charset utf-8;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html/blog;
index index.php index.html index.htm;
error_page 404 /test.jpg;
}
location ~ \.php$ {
root /usr/share/nginx/html/blog;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
}
错误:
1)、无法上传大的blog主题(大容量的内容)
在server下新增配置:
client_max_body_size 50m; #默认只有1M,修改成50M.
修改php.ini里的上传限制
upload_max_filesize 50m;