1、配置状态页:
[root@200 html]#vim /apps/nginx/conf/nginx.conf
location = /nginx_status {
stub_status;
}
2、Nginx中设置json格式日志:
vim /apps/nginx/conf/nginx.conf
http {
include mime.types;
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"$request_time';
log_format log_json '{
"@timestamp";"$time_local";
"remote_addr": "$remote_addr";
"referer": "$http_referer";
"request": "$request";
"status": $status";
"bytes": $body_bytes_sent";
"agent": "$http_user_agent";
"x_forwarded": "$http_x_forwarded_for";
"up_addr": "$upstream_addr";
"up_host": "$upstream_http_host";
"up_resp_time": "$upstream_response_time";
"request_time": "$request_time";
}'
access_log logs/access.log main json;
重启并访问测试!!!
自定义Nginx日志转换成json格式日志:
日志中的变量的作用:
\$remote_addr: #客户端的公网IP,
\$args: #变量中存放了URL的指令,“?:搜索符之后的搜索指令”例如http://www.magedu.net/main/index.do?
id=20190221&partner=search中的id=20190221&partner=search
\$document_root:#保存了针对当前的资源的请求的系统根目录,如:/apps/nginx/html.
\$document_uri: #保存了当前请求中不包含指令的URI,注意是不包含请求的指令,比如:http://www.magedu.net/main/index.do?id=20190221&partner=search会被定义为/main/index.do.
\$request_filename: #当前请求的资源文件的路径名称,由root或alias指令与URI请求生成的文件绝对路径,如/apps/nginx/html/main/index.html
\$host: #存放了请求的host名称。
\$http_user_agent::#客户端浏览器的详细信息。:"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:65.0) Gecko/2
0100101 Firefox/65.0"
\$http_cookie: #客户端的cookie信息。
limit_rate 10240: echo $limit_rate:
#如果Nginx服务器还用limit_rate配置了显示网络速率,则会显示,如果没设置,则显示0。
$remote_port: #客户端请求Nginx服务器时随机打开的端口,这是每个客户端自己的端口。
\$remote_user: #已经经过Auth Basic Module 验证的用户名。
\$request_body_file: #做反向代理时发给后端服务器的本地资源的名称。
\$request_method: #请求资源的方式,GET/PUT/DELETE等。
\$request_uri: #包含请求参数的原始URI,不包含主机名,如:/main/index.do?id=20190221&partner=search.
\$scheme: #请求的协议,如ftp,https,http等。
\$server_protocol: #保存了客户端请求资源使用的协议的版本。
\$server_addr: #保存了服务器的IP地址。
\$server_name: #保存了服务器的主机名。
\$server_port: #请求的服务器的端口号。
\$time_local: #[22/Feb/2019:08:44:14 +0800]
\$request: #通过哪个协议做的请求.: "GET /favicon.ico HTTP/1.1"
\$status 404
\$body_bytes_sent : 主机发送的字节数:162
一、自定义访问日志:
访问日志是记录客户端即用户的具体请求内容信息,全局配置模块中的error_log是记录Nginx服务器运行时的日志保存路径和记录日志的level,因此有着本质的区别,而且Nginx的错误日志一般只有一个,但是访问日志可以在不同server中定义多个,定义一个日志需要使用access_log指定日志的 保存路径,使用log_format指定日志的格式,格式中定义要保护的具体日志内容。
log_format nginx_formatl '$remote_addr - $remote_user [$time_local]
"$request" '
'$status $ body_bytes_sent "$http_referer”'
'$http_user_agent" "http_x_forwarded_for" '
"$server_name: $server_port' ;
access_log logs/access.log nginx_formatl ;
#重启Nginx并访问测试日志格式
==> /apps/nginx/logs/access.log <==
192.168.0.1 - - [22/Feb/2019:08:44:14 +0800] "GET /favicon.ico HTTP/1.1" 404 162 "-
" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:65.0) Gecko/2
0100101 Firefox/65.0" "-"www.magedu.net:80
二、自定义json格式日志:
Nginx的默认访问日志记录内容相对较单一,默认的格式也不方便后期做日志统计分析,生产环境中通常将Nginx日志转换为json日志,然后配合使用ELK做日志收集-统计-分析。
log_format access_json '{"@timestamp":"$time_iso8601",'
'"host":"$server_addr",'
'"clientip":"$remote_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"uri":"$uri",'
'"domain":"$host",'
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"tcp_xff":"$proxy_protocol_addr",'
'"http_user_agent":"$http_user_agent",'
'"status":"$status"}';
access_log /apps/nginx/logs/access_json.log access_json。
重启Nginx并访问测试日志格式
{"@timestamp":"2019-02-
22T08:55:32+08:00","host":"192.168.7.102","clientip":"192.168.0.1","size":162,"resp
onsetime":0.000,"upstreamtime":"-","upstreamhost":"-
","http_host":"www.magedu.net","uri":"/favicon.ico","domain":"www.magedu.net","xff"
:"-","referer":"-","tcp_xff":"","http_user_agent":"Mozilla/5.0 (Windows NT 6.1;
Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0","status":"404"}
one、自签名证书
3、单个域名的证书颁发:
1 cd /apps/nginx/conf
2 mkdir certs cd certs/
3 openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 3650 -out ca.crt #自签名CA证书
4 openssl req -newkey rsa:4096 -nodes -sha256 -keyout www.magedu.net.key -out www.magedu.net.csr #自制key和csr
5 openssl x509 -req -days 3650 -in www.magedu.net.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out www.magedu.net.crt #签发证书
6 openssl x509 -in www.magedu.net.crt -noout -text #验证证书内容
7 [root@200 certs]#ll
total 36
-rw-r--r--. 1 root root 2017 Mar 17 20:52 ca.crt
-rw-r--r--. 1 root root 3272 Mar 17 20:52 ca.key
-rw-r--r--. 1 root root 17 Mar 17 21:45 ca.srl
-rw-r--r--. 1 root root 1891 Mar 17 21:45 mobile.magedu.net.crt
-rw-r--r--. 1 root root 1691 Mar 17 21:44 mobile.magedu.net.csr
-rw-r--r--. 1 root root 3272 Mar 17 21:44 mobile.magedu.net.key
-rw-r--r--. 1 root root 1903 Mar 17 20:59 www.magedu.net.crt
-rw-r--r--. 1 root root 1704 Mar 17 20:57 www.magedu.net.csr
-rw-r--r--. 1 root root 3272 Mar 17 20:57 www.magedu.net.key crt与key是配套的
8 [root@200 certs]#vim /apps/nginx/conf/conf.d/pc.conf
server {
listen 80;
listen 443 ssl;
server_name www.magedu.net;
ssl_certificate /apps/nginx/conf/certs/www.magedu.net.crt;
ssl_certificate_key /apps/nginx/certs/www.magedu.net.key;
/apps/nginx/sbin/nginx -t /-s reload
去测试一下:(注:第一次访问有些慢,服务器端把证书发给客户端,客户端生成随机数,把随机数发给服务器,服务器加密后再发给客户端,所以会有延迟) 第二段结束。
3、将mobile web移动端变成https:
[root@200 certs]#vim /apps/nginx/conf/conf.d/mobile.conf
server {
listen 80;
listen 443 ssl;
server_name mobile.magedu.net;
ssl_certificate /apps/nginx/conf/certs/mobile.magedu.net.crt;
ssl_certificate_key /apps/nginx/conf/certs/mobile.magedu.net.key;
在访问网页之前,先在c盘hosts文件中加入“mobile magedu.net”
two、HTTPs功能:
Web网站的登录页面都是使用https加密传输的,加密数据以保障数据的安全,HTTPS能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议,HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。
https 实现过程如下:
1.客户端发起HTTPS请求: 客户端访问某个web端的https地址,一般都是443端口
2.服务端的配置:
采用https协议的服务器必须要有一套证书,可以通过一些组织申请,也可以自己制作,目前国内很多网站都自己做的,当你访问一个网站的时候提示证书不可信任就表示证书是自己做的,证书就是一个公钥和私钥匙,就像一把锁和钥匙,正常情况下只有你的钥匙可以打开你的锁,你可以把这个送给别人让他锁住一个箱子,里面放满了钱或秘密,别人不知道里面放了什么而且别人也打不开,只有你的钥匙是可以打开的。
3.传送证书:
服务端给客户端传递证书,其实就是公钥,里面包含了很多信息,例如证书得到颁发机构、过期时间等等。
4.客户端解析证书:
这部分工作是有客户端完成的,首先会验证公钥的有效性,比如颁发机构、过期时间等等,如果发现异常则会弹出一个警告框提示证书可能存在问题,如果证书没有问题就生成一个随机值,然后用证书对该随机值进行加密,就像2步骤所说把随机值锁起来,不让别人看到。
5.传送4步骤的加密数据:
就是将用证书加密后的随机值传递给服务器,目的就是为了让服务器得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值进行加密解密了。
6.服务端解密信息:
服务端用私钥解密5步骤加密后的随机值之后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密,对称加密就是将信息和私钥通过某种算法混合在一起,这样除非你知道私钥,不然是无法获取其内部的内容,而正好客户端和服务端都知道这个私钥,所以只要机密算法够复杂就可以保证数据的安全性。
7.传输加密后的信息:
服务端将用私钥加密后的数据传递给客户端,在客户端可以被还原出原数据内容。
8.客户端解密信息:
客户端用之前生成的私钥获解密服务端传递过来的数据,由于数据一直是加密得,因此即使第三方获取到数据也无法知道其详细内容。
three、Nginx Rewrite功能:
Nginx服务器利用ngx_http_rewrite_module 模块解析和处理rewrite请求,所以说此功能依靠 PCRE(perlcompatible regularexpression),因此编译之前要安装PCRE库,rewrite是nginx服务器的重要功能之一,用于实现URL的重写,URL的重写是非常有用的功能,比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需其他网站修改我们的链接,就可以设置为访问,另外还可以在一定程度上提高网站的安全性。
rewrite flag :
利用Nginx的rewrite的指令,可以实现url的重新跳转,四种不同的flag:
一、redirect(临时重定向)、 二、permanent(永久重定向)、 :跳转型的flag,是指有客户端浏览器重新对新地址进行请求,三、break 四、last :代理型是在WEB服务器内部实现的跳转。
redirect;#临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求;使用相对路径,或者http://或https://开头,状态码:302
permanent;#重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求,状态码:301
last;#重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URL启动新一轮重写检查;提前重启新一轮循环,不建议在location中使用
break;#重写完成后停止对当前URL在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在location中使用
示例:将访问源域名 www.magedu.net 的请求永久重定向到www.magedu.com。
注意:临时重定向不会缓存域名解析记录(A记录),但是永久重定向会缓存,例如:京东早期的域名 www.360buy.com 由于与360公司类似,于是后期永久重定向到了 www.jd.com ,永久重定向会缓存DNS解析记录。
vim /apps/nginx/conf/conf.d/pc.conf
location / {
root /data/nginx/html/pc;
index index.html;
rewrite / http://www.magedu.com permanent;
}
#重启Nginx并访问域名www.magedu.net进行测试:(访问前)
访问后:
临时重定向:域名临时重定向,告诉浏览器域名不是固定重定向到当前目标域名,后期可能随时会更改,因此浏览器不会缓存当前域名的解析记录。
vim /apps/nginx/conf/conf.d/pc.conf
location / {
root /data/nginx/html/pc;
index index.html;
rewrite / http://www.magedu.com redirect;
}
#重启Nginx并访问域名www.magedu.net进行测试:(访问前)
访问后:
rewrite自动跳转https
server {
listen 443 ssl;
listen 80;
ssl_certificate /apps/nginx/certs/www.magedu.net.crt;
ssl_certificate_key /apps/nginx/certs/www.magedu.net.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
server_name www.magedu.net;
location / {
root /data/nginx/html/pc;
index index.html;
if ($scheme = http ){ #未加条件判断,会导致死循环
rewrite / https://www.magedu.net permanent;
}
}
[root@200 ~]#vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.18.9.200 www.magedu.net 把该IP加入hosts中,当curl时才会被找到:
[root@200 ~]#curl -L -k -i https://www.magedu.net
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Mon, 18 Mar 2019 14:39:26 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Fri, 15 Mar 2019 10:43:23 GMT
Connection: keep-alive
Keep-Alive: timeout=65
ETag: "5c8b81cb-7"
Accept-Ranges: bytes
pc web
rewrite判断文件是否存在
当用户访问到公司网站的时输入了一个错误的URL,可以将用户重定向至官网首页。 最常用!!!!
location / {
root /data/nginx/html/pc;
index index.html;
if (!-f $request_filename) {
#return 404 "linux35";
rewrite (.*) http://www.magedu.net/index.html;
}
}
#重启Nginx并访问测试:访问前:
访问后跳转:
four、Nginx防盗链
防盗链基于客户端携带的referer实现,referer是记录打开一个页面之前记录是从哪个页面跳转过来的标记信息,若别人只链接了自己网站图片或某个单独的资源,而不是打开了网站的整个页面,这就是盗链,referer就是之前的那个网站域名,
例题:在一个web 站点盗链另一个站点的资源信息,比如图片、视频等
先做盗链再做防盗链:
1、mkdir /data/nginx/html/mageedu
vim /data/nginx/html/mageedu 准备盗链web页面
测试盗链;
;
2、vim /data/nginx/html/mageedu/index.html 加上这个配置文件
测试盗链;
;
3、vim /apps/nginx/conf/conf.d/mageedu.conf 定义配置文件
server {
listen 80;
server_name www.mageedu.net;
location / {
index index.html;
root "/data/nginx/html/mageedu";
access_log /apps/nginx/logs/www.mageedu.net.log access_json;
}
}
4、在c盘hosts文件中加入“172.18.9.200 www.mageedu.net” 让互联网能够解析到本主机的地址。
5、访问并测试:
five、Nginx HTTP 反向代理
上图解释:同构:web服务器(nginx)替用户构建请求的资源发往后端,再重新将数据封装发给用户,异构:用户使用http请求来的php页面,nginx无法用tcp向后端转发,tcp就用fastcgi向后端转发,4层负载均衡服务器负责负载,7层负载均衡服务器负责代理,tcp才有负载均衡的功能。
反向代理:也叫reverse proxy,指的是代理外网用户的请求到内部的指定web服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式
gx_http_proxy_module: 将客户端的请求以http协议转发至指定服务器进行处理。
ngx_stream_proxy_module:将客户端的请求以tcp协议转发至指定服务器处理。
ngx_http_fastcgi_module:将客户端对php的请求以fastcgi协议转发至指定服务器处理。
例题:将用户对域www.magedu.net的请求转发至后端服务器处理
环境准备:172.18.9.200 :nginx代理服务器、172.18.9.150 :后端web1 apache部署、172.18.9.100 :后端web2 apache部署
1、100/150主机:yum install httpd -y echo "web1 192.168.7.103" > /var/www/html/index.html systemctl start httpd && systemctl enable httpd
A情况:
location /web {
index index.html;
proxy_pass http://172.18.9.150:80;
#不带斜线将访问的/web,等于访问后端服务器 http://172.18.9.150:80/web/index.html,即后端服务器配置的站点根目录要有web目录才可以被访问,这是一个追加/web到后端服务器http://servername:port/WEB/INDEX.HTML的操作
#重启Nginx测试访问效果:
2、vim /apps/nginx/conf/conf.d/pc.conf
location /web {
index index.html;
proxy_pass http://172.18.9.150:80;
}
/apps/nginx/sbin/nginx -t
[root@200 ~]#/apps/nginx/sbin/nginx -s reload
3、访问测试,因为150主机没有东西,所以显示找不到
B情况:
proxy_pass http://172.18.9.150:80/;
#带斜线,等于访问后端服务器的http://172.18.9.150:80/;内容返回给客户端
访问测试:如下
C情况:
proxy_pass http://172.18.9.150:80; #不带斜线将访问的/web
在150主机:1、cd /var/www/html 2、mkdir web 3、vim web/index.html : test web_page
4、访问测试:
例题:反向代理示例--指定location
1、vim /apps/nginx/conf/conf.d/pc.cpnf
server {
listen 80;
listen 443 ssl;
server_name www.magedu.net;
root /data/nginx/html/pc;
index index.html index.php;
}
location /web {
proxy_pass http://172.18.9.100:80/;
}
/apps/nginx/sbin/ngix -t / -s reload
2、[root@s150 ~]# mkdir /var/www/html/web
[root@s150 ~]# echo "web1 page for apache" > /var/www/html/web/index.html
[root@s100 ~]# mkdir /var/www/html/web
[root@s100 ~]# echo "web2 page for apache" > /var/www/html/web/index.html
3、重启访问测试:
[root@150 ~]#curl http://www.magedu.net/
pc web
[root@·50 ~]#curl http://www.magedu.net/web
web2 172.18.9.100
4、#Apache的访问日志:
[root@100 ~]#tail -f /var/log/httpd/access_log
172.18.140.177 - - 2019-03-20 19:37:25 "GET / HTTP/1.1" 200 13 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36"
172.18.140.177 - - 2019-03-20 19:37:25 "GET /favicon.ico HTTP/1.1" 404 209 "http://172.18.9.100/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36"
172.18.9.200 - - 2019-03-20 22:26:51 "GET / HTTP/1.0" 200 18 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36"
172.18.9.200 - - 2019-03-20 22:28:28 "GET / HTTP/1.0" 200 18 "-" "curl/7.29.0"
172.18.9.200 - - 2019-03-20 22:34:59 "GET / HTTP/1.0" 200 18 "-" "curl/7.29.0" 着条记录说明刚刚访问已被记录在册。
反向代理的缓存功能:
1、vim /apps/nginx/conf/nginx.conf
proxy_cache_path /data/nginx/proxycache levels=1:1:1 keys_zone=proxycache:20m
inactive=120s max_size=1g; #配置在nginx.conf http配置段
2、vim /apps/nginx/conf/conf.d/pc.conf
location /web { #要缓存的URL 或者放在server配置项对所有URL都进行缓存
proxy_pass http://172.18.9.100:80/;
proxy_set_header clientip $remote_addr;
proxy_cache proxycache;
proxy_cache_key $request_uri;
proxy_cache_valid 200 302 301 1h;
proxy_cache_valid any 1m;
}
3、 /apps/nginx/sbin/nginx -t 4、systemctl start nginx
5、验证缓存目录结构及文件大小:
[root200 ~]#tree /data/nginx/proxycache/
/data/nginx/proxycache/
├── 8
│ └── c0
│ └── 4a
│ └── 21f470a48e953a199103a3a4c064ac08
└── f
└── 60
└── b0
└── 50b643197ae7d66aaaa5e7e1961b060f
6 directories, 2 files
six:添加头部报文信息:
nginx的配置:
vim /apps/nginx/conf/conf.d/pc.conf
location /web {
proxy_pass http://192.168.7.103:80/;
proxy_set_header clientip $remote_addr;
proxy_cache proxycache;
proxy_cache_key $request_uri;
proxy_cache_valid 200 302 301 1h;
proxy_cache_valid any 1m;
add_header X-Via $server_addr;
add_header X-Cache $upstream_cache_status;
add_header X-Accel $server_name;最后三项是添加的自定义头部。
验证头部信息:
[root@centos7 ~]#curl -I http://www.magedu.net/web/index.html
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Thu, 21 Mar 2019 01:15:11 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 18
Connection: keep-alive
Keep-Alive: timeout=65
Last-Modified: Wed, 20 Mar 2019 11:41:18 GMT
ETag: "12-58485199e4174"
X-Via: 172.18.9.200
X-Cache: MISS 第一次访问没有使用缓存
X-Accel: www.magedu.net
Accept-Ranges: bytes
[root@centos7 ~]#curl -I http://www.magedu.net/web/index.html
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Thu, 21 Mar 2019 01:15:25 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 18
Connection: keep-alive
Keep-Alive: timeout=65
Last-Modified: Wed, 20 Mar 2019 11:41:18 GMT
ETag: "12-58485199e4174"
X-Via: 172.18.9.200
X-Cache: HIT 第二次访问命中缓存
X-Accel: www.magedu.net
Accept-Ranges: bytes
vim /apps/nginx/conf/conf.d/pc.conf
upstream webserver {
server 172.18.9.100 weight=1 max_fails=3 fail_timeout=5; 添加权重等信息。
}
location /web {
#proxy_cache proxycache;
#proxy_cache_key $request_uri;
#proxy_cache_valid 200 302 301 1h;
#proxy_cache_valid any 1m;
#add_header X-Via $server_addr;
#add_header X-Cache $upstream_cache_status;
#add_header X-Accel $server_name; 缓存给注释。
}
访问测试:下图是轮询效果:
上图解析:一致性哈希就是把后端服务器放在左表,该圈圈的值是0-(2^32-1),我们访问某一个服务器down机,它会依次往返,所以,当一个服务器发生变化时,其他的不受影响,例如右图,×××部分,添加一个服务器,它只会影响哈希值是×××部分的的用户请求,用一致性哈希的情况较多。
当我们标注了一致性哈希,由于访问的url是一个,所以会被调度到同一个服务器上,如下:
vim /apps/nginx/conf/conf.d/pc.conf
upstream webserver {
server 172.18.9.100 weight=1 max_fails=3 fail_timeout=5;
hash $request_uri consistent;
} 下图是100主机页面:
1、vim /apps/nginx/conf/conf.d/pc.conf
location ~* .(gif|jpg|bmp|tiff|ico|wmf|js)$ {
root /data/nginx/html/images;
index index.html;
}
2、cat /data/nginx/html/images/
total 84
-rw-r--r--. 1 root root 61790 Mar 16 19:54 1.jpg
-rw-r--r--. 1 root root 20255 Feb 7 14:19 2.jpg 上传一张图片命名为2.jpg
访问测试:
seven、负载均衡实例:MySQL
1、在100主机:[root@100 ~]# yum install mariadb mariadb-server -y / systemctl start mariadb
[root@centos7 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 50 :3306 :*
2、[root@100 ~]#mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.60-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '123gxy' WITH
Query OK, 0 rows affected (0.02 sec) 进行授权,否则无法登陆。
3、 在200主机:[root@200 ~]#cd /apps/nginx/conf
mkdir tcp ---> cd tcp/ ---> vim mariadb.conf
stream {
upstream mariadb_server {
server 172.18.9.100:3306 max_fails=3 fail_timeout=30s;
}
server {
listen 3306;
proxy_connect_timeout 10s;
proxy_timeout 10s;
proxy_pass mariadb_server;
}
}
4、在200主机、vim /apps/nginx/conf/nginx.conf
将“include /apps/nginx/conf/tcp/mariadb.conf; ”添加在http { 配置项外面。
/apps/nginx/sbin/nginx -t / -s reload
5、[root@100 ~]#mysql -h172.18.9.200 -p123gxy
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 5.5.60-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.01 sec)
eight、实现Fastcgi:
fastcgi官网:http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_param
一、yum安装安装php5.4
若没有epel源,要先下载:yum install epel-release
yum install php-fpm php-mysql 会生成/etc/php.ini文件,是编译安装不会生成的。
[root@150 ~]#grep -v ";" /etc/php-fpm.d/www.conf |grep -v "^$" 将配置文件过滤掉多余的信息。
[www]
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
user = nginx
group = nginx
pm = dynamic
pm.max_children = 100
pm.start_servers = 20
pm.min_spare_servers =20
pm.max_spare_servers = 35
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
systemctl start php-fpm ss -ntl:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.1:9000 :
会生成4个主要的目录:
1、conf:保存nginx所有的配置文件,其中nginx.conf是nginx服务器的最核心最主要的配置文件,其他的.conf则是用来配置nginx相关的功能的,例如fastcgi功能使用的是fastcgi.conf和fastcgi_params两个文件,配置文件一般都有个样板配置文件,是文件名.default结尾,使用的使用将其复制为并将default去掉即可。
2、html目录中保存了nginx服务器的web文件,但是可以更改为其他目录保存web文件,另外还有一个50x的web文件是默认的错误页面提示页面。
3、logs:用来保存nginx服务器的访问日志错误日志等日志,logs目录可以放在其他路径,比如/var/logs/nginx里面。
4、sbin:保存nginx二进制启动脚本,可以接受不同的参数以实现不同的功能
示例:准备php测试页面:
1 mkdir /data/php
2 vim /data/php/index.php
phpinfo();
?>
3 vim /apps/nginx/conf/conf.d/pc.conf 在指定文件配置 FastCGI,
location ~ .php$ {
#root /data/nginx/php;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/php$fastcgi_script_name;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#如果SCRIPT_FILENAME是绝对路径则可以省略root /data/nginx/php;
include fastcgi_params;
4 systemctl start php-fpm 并访问测试:
二、我们也可以如下:在配置fastcgi_param时,利用$document_root变量取到/data/php,再使用$fastcgi_script_name获取到index.php页面。(最常用)
vim /apps/nginx/conf/conf.d/pc.conf
location ~ .php$ {
root /data/php; 定义根目录
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
访问测试:
三、1 vim /etc/php-fpm.d/www.conf
pm.status_path = /pm_status ping.path = /ping ping.response = pong 这三项取消注释。
2 vim /apps/nginx/conf/conf.d/pc.conf
location ~ ^/(pm_status|ping)$ {
#access_log off;
#allow 127.0.0.1;
#deny all;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
}
3、下图就是实现了小型的监控:
FastCGI示例--Nginx与php不在同一个服务器:yum安装较新版本的php-fpm
环境:200主机:Nginx服务器、150主机:php-fpm服务器
php-fpm安装在我的150主机上,和Nginx服务器分开,
1、[root@150 data]#wget https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/7/
2、[root@150 data]#yum install php56-php-fpm php56-php-mysql
3、创建Nginx用户:useradd nginx -s /sbin/nologin -u 2000 (每台主机的用户id都要一样才行)。
id nginx uid=2000(nginx) gid=2000(nginx) groups=2000(nginx)
[root@150 yum.repos.d]#rpm -ql php56-php-fpm
/etc/logrotate.d/php56-php-fpm
/etc/systemd/system/php56-php-fpm.service.d
/opt/remi/php56/root/etc/php-fpm.conf
/opt/remi/php56/root/etc/php-fpm.d
/opt/remi/php56/root/etc/php-fpm.d/www.conf
/opt/remi/php56/root/etc/sysconfig/php-fpm
/opt/remi/php56/root/usr/sbin/php-fpm
/opt/remi/php56/root/usr/share/doc/php56-php-fpm-5.6.40
/opt/remi/php56/root/usr/share/doc/php56-php-fpm-5.6.40/php-fpm.conf.default
/opt/remi/php56/root/usr/share/fpm
/opt/remi/php56/root/usr/share/fpm/status.html
/opt/remi/php56/root/usr/share/licenses/php56-php-fpm-5.6.40
/opt/remi/php56/root/usr/share/licenses/php56-php-fpm-5.6.40/fpm_LICENSE
/opt/remi/php56/root/usr/share/man/man8/php-fpm.8.gz
/opt/remi/php56/root/var/lib/php/session
/opt/remi/php56/root/var/lib/php/wsdlcache
/opt/remi/php56/root/var/log/php-fpm
/opt/remi/php56/root/var/run/php-fpm
/usr/lib/systemd/system/php56-php-fpm.service
4、[root@150 yum.repos.d]#vim /opt/remi/php56/root/etc/php-fpm.d/www.conf
user = nginx
group = nginx
listen = 172.18.9.150:9000vim
;listen.allowed_clients = 127.0.0.1 这一行务必注释掉,允许外网访问,否则会报502错误,
5、[root@150 web]#systemctl restart php56-php-fpm
[root@150 web]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 172.18.9.150:9000 :
6、mkdir /data/php -p
vim /data/php/index.php
phpinfo();
?>
7、现在去配置Nginx访问:
location ~ .php$ {
root /data/php;
fastcgi_pass 172.18.9.150:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
8、/apps/nginx/sbin/nginx -t / -s reload
9、访问测试:新版5.6已呈现: