目录
部署LNMP环境,
实现动态网站解析
静态网站 在不同环境下,网站内容不会变化
动态网站 在不同环境下,网站内容有可能发生变化
nginx默认不支持动态网站,但我们可以用LNMP环境让它支持。
淘宝就用的nginx搭建的。
L linux 操作系统
N nginx 网站服务
M mariadb(mysql) 数据库
P php 编写动态网站的语言工具
准备nginx以及相关软件包
killall nginx //停止nginx程序
cd /root/lnmp_soft/nginx-1.17.6
rm -rf /usr/local/nginx //删除nginx原有目录
./configure --with-http_ssl_module //配置
make //编译
make install //安装
yum -y install mariadb mariadb-server //安装数据库客户端
与服务端
systemctl start mariadb //开启数据库服务
yum -y install mariadb-devel //安装数据库开发环境依赖包
yum -y install php //安装php,相当于解释器
yum -y install php-fpm //安装可以帮助nginx解析php语言编写的动
态网站的服务
yum -y install php-mysql //安装php与mysql关联的软件包
systemctl start php-fpm //开启php-fpm服务
yum -y install net-tools
netstat -ntulp | grep mysql //检查数据库
netstat -ntulp | grep php-fpm //检查php-fpm服务
准备动态网站页面的测试文件
cp ~/lnmp_soft/php_scripts/test.php /usr/local/nginx/html //拷贝动态网站测试页面到nginx中
cd /usr/local/nginx
sbin/nginx //启动nginx服务
打开nginx配置文件,第65到71行去掉注释(可以用:65,71s/#//),69行不用去
location ~ \.php$ { //~是使用正则表达式,匹配以.php结尾
root html; //网站页面位置,不用改,保持默认
fastcgi_pass 127.0.0.1:9000; //一旦用户访问了.php结尾的文
件,就让nginx找后台的php-fpm(端口号9000)
fastcgi_index index.php; //动态网站的默认页面,无需修改
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
//无用行,保持注释状态
include fastcgi.conf; //这里是另外一个配置文件,需要改扩展名
}
---------------------------------------
fastCGI
快速公共(通用)网关接口,可以连接如nginx等网站程序到网站
的语言解释器(比如php)
---------------------------------------
sbin/nginx //开启nginx,如果已经开启就使
用sbin/nginx -s reload 如果均不能正常开启,就用killall nginx然后重新试
使用火狐访问http://192.168.2.5/test.php 可以看到页面内容
测试有数据库的动态网站(在普通情况下访问网站内容会发生变化)
动静分离:动态网站和静态网站分开处理的
cp ~/lnmp_soft/php_scripts/mysql.php /usr/local/nginx/html/ //拷贝另外一个测试页面到nginx
浏览器打开http://192.168.2.5/mysql.php 可以看到网站显示了数据的账户信息
mysql //进入数据库
create user dc@localhost identified by '123'; //创建测试账户
quit; //退出
刷新http://192.168.2.5/mysql.php 可以看到新创建的用户
看到以上test.php、mysql.php两个页面说明nginx不但能识别静态网站,也能解析动态
网站了,这种情况也可以记作nginx实现了动静分离
地址重写
可以定义用户的访问路径可以看到的实际内容
rewrite 匹配路径 实际看到的页面 选项
相同网站不同页面
cp conf/nginx.conf.default conf/nginx.conf //可以先还原配置文件
cp:是否 覆盖"conf/nginx.conf"? y
打开配置文件,在38行添加
rewrite /a.html /b.html; //用户访问的路径中包含a.html的话
就跳转到b.html页面
只要页面含有/html便能访问成功
然后准备测试页面
echo "nginx-a~~" > html/a.html
echo "nginx-b~~" > html/b.html
[root@proxy nginx]# sbin/nginx -s reload
使用浏览器访问192.168.2.5/a.html看到的是b.html的内容
相同网站不同页面
rewrite ^/a\.html$ /b.html redirect; //在刚刚的配置中添加redirect
sbin/nginx -s reload
网站以html结尾以a.html开头才能才能搜索出来,不然是404报错;
Redirect意思是地址栏也改成对应网站,重定向;
使用http://192.168.2.5/a.html路径访问网站时,地址栏同时发生
变化
不同网站间跳转
rewrite / http://www.tmooc.cn; //访问192.168.2.5的网站可以
跳转到www.tmooc.cn
sbin/nginx -s reload
访问老网站会跳到新
rewrite /(.*) http://www.tmooc.cn/$1; //访问老网站会跳到新
网站,同时会携带所访问的页面,()是正则,代表保留(复制) $1表示粘贴之前第一个小括号保留的内容
sbin/nginx -s reload
不同浏览器跳转到不同页面
mkdir html/firefox
echo firefox~~ > html/firefox/abc.html
echo others~~ > html/abc.html
火狐专用页面 火狐访问192.168.2.5/abc.html时可以看html/firefox/abc.html里面内容
其他专用页面 其他访问192.168.2.5/abc.html 时可以看到html/abc.html里面内容
修改配置文件,删除原有地址重写,原地添加
if ($http_user_agent ~* firefox){ //如果用户使用了火狐浏览器
rewrite /(.*) /firefox/$1; //就进行地址重写操作,让用户看到火狐专属页面
}
//$http_user_agent是nginx的内置变量,存储了用户的信息,比如用的什么浏览器
~匹配正则 *忽略大小写
改完后sbin/nginx -s reload
使用火狐浏览器查看192.168.2.5/abc.html可以看到之前html/firefox目录下的页
面,非火狐浏览器打开192.168.2.5/abc.html看到的是html下的页面
redirect 临时重定向 状态码 302
permanent 永久重定向 状态码 301
last 不再读其他rewrite
break 不再读其他语句
地址重写的好处
-
缩短URL,隐藏实际路径提高安全性;
-
易于用户记忆和键入;
-
易于被搜索引擎收录。
nginx代理功能
该功能可以通过组建后台集群提高网站性能
环境准备
proxy 2.5
web1 2.100
web2 2.200
检查ip,同网段要互通,检查yum
在web1、web2主机安装常用软件包与网站服务httpd
yum -y install vim net-tools bash-completion psmisc httpd
然后继续准备网站页面
echo "web1~~" > /var/www/html/index.html //创建测试页面,如果是web2主机的话要写web2~~
systemctl start httpd //然后将web1、web2的服务开启
systemctl stop firewalld //关闭防火墙
回到proxy主机:
[root@proxy nginx]# curl 192.168.2.100 //到proxy主机测试
web1~~
[root@proxy nginx]# curl 192.168.2.200
web2~~
接下来还原proxy主机的nginx
[root@proxy nginx]# cd ~/lnmp_soft/
[root@proxy lnmp_soft]# killall nginx
[root@proxy lnmp_soft]# rm -rf /usr/local/nginx/
[root@proxy lnmp_soft]# rm -rf nginx-1.17.6
[root@proxy lnmp_soft]# tar -xf nginx-1.17.6.tar.gz
[root@proxy lnmp_soft]# cd nginx-1.17.6/
[root@proxy lnmp_soft]#yum -y install gcc make pcre-devel openssl-devel
[root@proxy nginx-1.17.6]# ./configure
[root@proxy nginx-1.17.6]#make
[root@proxy nginx-1.17.6]#make install
实现集群功能(轮询)
[root@proxy nginx]# vim conf/nginx.conf
upstream web { //首先是34~37行,创建集群,集群名称叫web
server 192.168.2.100:80; //这里是集群中的服务器ip与端口
server 192.168.2.200:80; //第二台集群主机
}
server {
listen 80;
.....
location / {
proxy_pass http://web; //在第47行,调用集群
root html;
index index.html index.htm;
}
之后开启nginx或者重加载nginx配置,用curl 192.168.2.5可以看到 web1
或web2页面轮询出现
集群优化(权重)
1, 调节权重定义集群主机任务的分配量
server 192.168.2.200:80 weight=2; //为性能较强的集群主机配置权重权重越大任务的分配量就越大
[root@proxy nginx]# curl 192.168.2.5
web2~~
[root@proxy nginx]# curl 192.168.2.5
web2~~
[root@proxy nginx]# curl 192.168.2.5
web1~~
2, 配置健康检查
server 192.168.2.200:80 max_fails=2 fail_timeout=30; //检测两次如果失败,则认为集群中的主机故障,之后等待30秒再次测试
sbin/nginx -s reload
测试时,先将web2的httpd服务关闭,回到proxy访问集群页面curl 192.168.2.5
只会显示web1的页面,此时即使将web2的httpd服务开启也无效,因为要等
待30秒
3 .相同客户机访问相同服务器
upstream web {
ip_hash; //相同客户机访问相同服务器,让一个客户机访问集群时锁定
一个后台服务器,避免重复登陆的问题
server 192.168.2.100:80;
server 192.168.2.200:80;
}
sbin/nginx -s reload
curl 192.168.2.5 //重加载配置后访问2.5只会看到一个网站的页面
4,添加down标记
upstream web {
server 192.168.2.100:80;
server 192.168.2.200:80 down; //down标记可以让集群主机暂时不参与集群活动
}
sbin/nginx -s reload
curl 192.168.2.5
nginx实现的功能
网站服务,网站代理(网站业务),四层代理(其他业务)
使用nginx创建其他业务集群(四层代理)
[root@proxy nginx]# cd ~/lnmp_soft/nginx-1.17.6/
[root@proxy nginx-1.17.6]# killall nginx
[root@proxy nginx-1.17.6]# rm -rf /usr/local/nginx/
./configure --with-stream --with-http_stub_status_module
//这里的--with-stream 是添加四层代理模块,可以用来创建其
他业务集群,--with-http_stub_status_module是后面实验所需模块
另外,如果更新模块,但不想删除之前nginx数据,可以将nginx源码目录下的objs目录中的nginx文件拷贝到nginx的sbin目录下替代现有主程序,然后killall nginx 再重启即可
make //编译
make install //安装
cd /usr/local/nginx/
sbin/nginx -V //查看安装模块情况
打开nginx主配置文件,在16行左右(http上面),添加以下内容
stream { //创建新业务
upstream backend { //创建名叫backend的集群
server 192.168.2.100:22; //集群中的主机使用22端口对外提供服务,22是远程连接
server 192.168.2.200:22;
}
server { //虚拟主机
listen 12345; //监听端口号
proxy_pass backend; //调用集群
}
}
sbin/nginx //配置写好之后开启服务或者重加载配置文件
ssh 192.168.2.5 -p 12345 //尝试远程登录12345集群,第一次可能会连接集群的某一台主机比如web1
exit //退出
排错:
如果配置没有错误,但无法反复登陆web1与web2,可以按下列方式解决
[root@proxy nginx]# rm -rf ~/.ssh/known_hosts //每登录一次之后在proxy中删除记录文件
ssh 192.168.2.5 -p 12345 //再次尝试登录,会连接到另外一台集群主机
404报错(找不到文件)
打开配置文件,在默认的虚拟主机里面的location下面修改
error_page 404 /test.jpg; //这里把#注释去掉,后面改成test.jpg
,效果是如果客户访问了不存在的页面就显示test.jpg的内容
sbin/nginx -s reload //重加载配置
然后找一个图片扔到/usr/local/nginx/html里面,命名为test.jpg
使用浏览器虽随意访问不存在的页面192.168.2.5/XXXX.html 就可以看到之前
那张图片的内容
如果真机是windows可以用mobaXterm传test.jpg文件到nginx的html目录
如果真机是linux可以用scp命令
使用curl 192.168.2.5/status 查看
Active connections:当前活动的连接数量(当前有多少用户访问该网站)。
Accepts:已经接受客户端的连接总数量。
Handled:已经处理客户端的连接总数量。
Requests:客户端发送的请求数量。
Reading:当前服务器正在读取客户端请求头的数量。
Writing:当前服务器正在写响应信息的数量。
Waiting:当前多少客户端在等待服务器的响应。
Nginx的正向代理与反向代理
正向代理代理客户端,反向代理代理服务器。
正向代理是一个位于客户端和原始服务器(origin server)之前的服务器,为了从原始服务器获取内容,客户端向代理发送一个请求并指定目标,然后代理服务器向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理
比如需要访问某些国外网站,我们可能需要购买vpn
正向代理,架设在客户机与目标主机之间,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中
反向代理正好相反。对于客户端来说,反向代理就好像目标服务器。并且客户端不需要进行任何设置。客户端向反向代理发送请求,接着反向代理判断请求走向何处,并将请求转交给客户端,使得这些内容就好似他自己一样,一次客户端并不会感知到反向代理后面的服务,也因此不需要客户端做任何设置,只需要把反向代理服务器当成真正的服务器就好了。反向代理是作用在服务器端的,是一个虚拟ip(VIP)
反向代理服务器架设在服务器端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。