0516 LNMP架构(二)

本文围绕LNMP架构中的Nginx展开,详细介绍了默认虚拟主机、用户认证、域名重定向、访问日志、日志切割、防盗链、访问控制、解析php及代理等配置。通过具体操作步骤和测试示例,展示了各项配置的实现方法,有助于提升Nginx的使用效率和安全性。

0516 LNMP架构(二)

一、Nginx默认虚拟主机

在Nginx中也有默认虚拟主机,跟httpd类似,第一个被Nginx加载的虚拟主机就是默认主机,但和httpd不相同的地方是,它还有一个配置用来标记默认虚拟主机,也就是说,如果没有这个标记,第一个虚拟主机为默认虚拟主机。

1、编辑nginx.conf主配置文件

cd /usr/local/nginx/conf

vim /usr/local/nginx/conf/nginx.conf

删除以下内容,添加include vhost/*.conf;

028749e62c58f5136f45cfa1dee2a9c1492.jpg

2、在vhost目录下创建一个子目录

9eda0a416b082ac851cbabbd01c8433d135.jpg

其中:aaa.com.conf 的内容为:

server

{

listen 80 default_server; //默认虚拟主机服务

server_name aaa.com;//主机名 aaa.com

index index.html index.htm index.php; //定义索引页

root /data/wwwroot/default; //默认虚拟主机网站目录

}

3、创建/data/wwwroot/default 目录

mkdir /data/wwwroot/default

cd /data/wwwroot/default/

vim index.html

以下为index.html 内容:

this is the default site.

4、检测语法,重新加载配置

/usr/local/nginx/sbin/nginx -t

/usr/local/nginx/sbin/nginx -s reload

5、访问主机测试

curl localhost //访问主机this is the default site.

curl -x127.0.0.1:80 aaa.com //访问主机名aaa.com

this is the default site.

curl -x127.0.0.1:80 ddd.com //任意的域名,都指向主机名

this is the default site.

curl -x127.0.0.1:80 qq.com

this is the default site.

二、Nginx用户认证

1、vhost目录下创建虚拟主机

cd /usr/local/nginx/conf/vhost/

vim test.com.conf

添加配置文件内容:

server

{

listen 80;

server_name test.com;

index index.html index.htm index.php;

root /data/wwwroot/test.com;//网站目录

 

location /

{

auth_basic "Auth";

auth_basic_user_file /usr/local/nginx/conf/htpasswd;

}

}

2、创建用户,生成密码文件

由于nginx没有自带创建用户的工具,因此需要借助httpd工具;假如没有,则用此命令 yum install -y httpd;因为本机已经安装,因此直接执行;

/usr/local/apache2.4/bin/htpasswd -c /usr/local/nginx/conf/htpasswd luo

e1393b7b139848aa82d4a4fd21e6eb1ad8d.jpg

cat /usr/local/nginx/conf/htpasswd //查看密码生成文件

luo:$apr1$Ig2q78zn$55k1Q29067OWPfEAVGYw90

3、检测语法,重新加载

/usr/local/nginx/sbin/nginx -t

/usr/local/nginx/sbin/nginx -s reload

4、访问测试

curl -x127.0.0.1:80 test.com

提示401,需要指定用户登录

c4f1ea14f51348d08c96a4d255f93e23daf.jpg

curl -uluo:129615 -x127.0.0.1:80 test.com

没有test.com的目录,创建后,输出重定向test.com到指定/data/wwwroot/test.com/index.html 中

再次:curl -uluo:129615 -x127.0.0.1:80 test.com

289585485517a177e2f20be434bebf57ec9.jpg

成功访问

055e38269b9b1b188e53baad1ad6182454e.jpg

5、有时候我们需要对某个访问目录或者页面进行认证,而不是全站。所以我们需要对配置文件进行更改

vim test.com.conf  添加admin/

d2d97d3420ebcd4938c1cc5bccdd0493271.jpg

检测语法重新加载后,再次访问tese.com就不需要-u输入用户和密码了

curl -x127.0.0.1:80 test.com

1caa6dc2f025adac7f90f7d8d602821d763.jpg

创建admin目录再次测试访问admin

mkdir /data/wwwroot/test.com/admin

echo "test.com admin dir" >

/data/wwwroot/test.com/admin/index.html

访问admin显示401

6373d64530cbd6515281bb21052581724b9.jpg

指定用户名和密码后访问成功

72b335c923171b8d73f613b4b51f3ecfee9.jpg

6、location ~ admin.php:针对某个请求的url做认证

vim test.com.conf

88bd121e9c171a03a6c31963bb38790b36e.jpg

检测语法重新加载

curl -x127.0.0.1:80 test.com/admin/ //此时不需要用户认证

642c3bf8c09c61e5d39afd1113657c10e1b.jpg

但是访问admin.php时,就会401了

c5a0d5ea596324dbef5d4dba0a4f050d6a3.jpg

总结:

  • location /:针对整个目录做认证

也可以针对某一个目录或url做认证,比如:

  • location /admin/:针对admin目录做认证
  • location ~ admin.php:针对某个请求的url做认证

auth_basic_user_file:用户认证文件

三、Nginx域名重定向

当我们站点有多个域名的时候,权重降低了,但是之前的域名已经被一部分人所依赖了,也不可能去通知大家新的站点,所以我们就会选择一个主域名其它的直接跳到主域名!

1、修改配置文件,增加域名test2.com及test3.com

vim test.com.conf

添加多个域名,同时添加if语句

21ea9e9e18d8c605129e8c0b4d80f736e03.jpg

permanent:永久跳转,也就是301

redirect:临时跳转,302

技巧:使用ctrl + r 可以输入最近输入命令的参数以直接匹配到该命令执行

访问text2.com

curl -x127.0.0.1:80 test2.com/index.html -I

b4c7273101f9f6b2f546b5837237b0ee5d0.jpg

d67845f54ec2f6f29a860904aa60ed92007.jpg

重定向到了默认虚拟主机

四、Nginx访问日志

9b7c664aa912186341052cb67ba7e448ae7.jpg

在nginx主配置文件定义日志的,其中combined_realip为日志的名称,这个名称可以自定义,比如这里自定义为luo

1、进入nginx主配置文件里,按下图并定义日志名称

vim ../nginx.conf

d1379796b048cf728158fc27c986ea4de08.jpg

该行可以用来定义日志格式,比如可以修改为luo

dd1d0a5c937deb7b7c14a8c949120e32f66.jpg

2、在虚拟主机配置文件里,定义日志目录和格式、名称;

vim test.com.conf

添加该行:access_log /tmp/test.com.log luo;

6ed9f7979aa70b741c6242951f8d709f0b7.jpg

检测语法,重新加载

3、访问test3和test2

curl -x127.0.0.1:80 test3.com/index.html -I

curl -x127.0.0.1:80 test2.com/index.html -I

cat 日志查看下内容

cat /tmp/test.com.log

876f433bf806b82ece8703a03a469c09821.jpg

五、Nginx日志切割

由于Nginx不像Apache有自己的切割工具,在此我们需要写个脚本完成需求:

1、创建脚本文件

vim /usr/local/sbin/nginx_logrotate.sh

#! /bin/bash

d=`date -d "-1 day" +%Y%m%d`

logdir="/tmp/" //假设nginx的日志存放路径为/tmp/

nginx_pid="/usr/local/nginx/logs/nginx.pid"

cd $logdir

for log in `ls *.log`

do

mv $log $log-$d

done

/bin/kill -HUP `cat $nginx_pid`

脚本语句解释:

(1)d=date -d "-1 day" +%Y%m%d;生成昨天的日期

date2018年 07月 05日 星期四 21:07:49 CST

(2)for循环,把ls列举的log文件,执行以日期格式的重命名

(3)nginx_pid=”/usr/local/nginx/logs/nginx.pid”; 就是为了最后一行而设定的。

/bin/kill -HUP cat $nginx_pid

最后一行的意思和之前使用的 -s reload 是一个意思 重载nginx.pid,然后就会再次生成一个新的日志文件。否则不生成日志文件

2、执行脚本-x并查看执行过程

sh -x /usr/local/sbin/nginx_logrotate.sh

ls /tmp/ 查看生成的test.com日志

32f0ecd66981a89008f3ebd1bfee0901e77.jpg

3、日志清理

删除超过一个月的日志(当然这个也可以写在脚本里面)

find /tmp/ -name *.log-* -type f -mtime +30 |xargs rm

4、添加任务计划

crontab -e

添加:

0 0 * * * /usr/local/sbin/nginx_log_rotate.sh //每天的0时0分执行此脚本

5、静态文件不记录到日志和过期时间

虚拟主机配置文件location~可以指定对应的静态文件,expires配置过期时间,而access_log 配置为off就可以不记录访问日志了

(1)配置文件vim test.com.conf

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ //匹配.gif等格式的静态文件不计入日志

{

expires 7d; //有效期7天

access_log off; //不记录日志

}

location ~ .*\.(js|css)$ //匹配js或者css文件

{

expires 12h; //有效期12小时

access_log off;

}

(2)测试

在网站test.com目录下,创建gif和css文件

e63000c3281d8365ebb5007cf4a684fa4ae.jpg

现在开始访问,然后看生成的日志;从下面试验,可以看出日志不记录gif及css文件;

a2aace9eeeff549bd28a6a73a5381a071d7.jpg

六、Nginx防盗链

1、防盗链代码,里面包含过期时间;

vim /usr/local/nginx/conf/vhost/test.com.conf

添加:

location ~*

^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$

 {

expires 7d;

valid_referers none blocked server_names *.test.com;

if ($invalid_referer) {

return 403;

}

access_log off;

}

2、检测语句并重新加载

测试,针对有效referer和无效referer的对比;

HTTP/1.1 403 Forbidden //无效refer,返回403

HTTP/1.1 200 OK //白名单的refer

bc30f3a97aae708cb0dd42646e2c2bd2685.jpg

七、Nginx访问控制

为了提高安全性,我们需要将某些页面加密处理!

1. 针对某个目录设置加密

(1)需求:访问/admin/目录的请求,只允许某几个IP访问,配置如下:

location /admin/ //在admin目录下操作

 

{

#allow 127.0.0.1; //不执行,可以测试时作对比

allow 192.168.169.129;

deny all;

}

将其放入虚拟主机配置文件中

vim /usr/local/nginx/conf/vhost/test.com.conf

(2)、检查语句,并加载配置文件

/usr/local/nginx/sbin/nginx -t

/usr/local/nginx/sbin/nginx -s reload

(3)、测试,通过允许192.168.169.129和禁止127.0.0.1来做实验,这两个IP主机都能连接到;

curl -x127.0.0.1:80 -I test.com/admin/

curl -x192.168.169.129:80 -I test.com/admin/

58286e371f8c53a386202d2f16fc0528278.jpg

2、针对目录下的某类文件加密

这里主要是为了防止上传php文件,以免造成木马文件,影响安全;在上传目录upload和image,禁止.php的文件。

(1)进入虚拟主机配置文件

vim /usr/local/nginx/conf/vhost/test.com.conf

(2)添加配置内容

location ~ .*(upload|image)/.*\.php$

{

deny all;

}

(3)检查语句,并加载配置文件

(4)测试:在upload目录下,分别创建1.txt和1.php文件,能够访问1.txt,不能够访问1.php;

mkdir /data/wwwroot/test.com/upload

echo "1111" > /data/wwwroot/test.com/upload/1.php

echo "2222" > /data/wwwroot/test.com/upload/1.txt

分别访问1.php和1.txt

curl -x192.168.169.129:80 test.com/upload/1.php

curl -x192.168.169.129:80 test.com/upload/1.txt

1.txt可以被访问到,1.php则不能被访问到

752905088944199709b5a2b9602ba31ff50.jpg

3、根据user-agent限制

不想被蜘蛛爬自己的网站,我们完全可以根据user-agent去禁止掉相关的user-agent访问网站;

(1)进入主机配置文件

vim /usr/local/nginx/conf/vhost/test.com.conf

(2)添加下列配置内容

if ($http_user_agent ~* 'Spider/3.0|YoudaoBot|Tomato')//匹配后面加*号,可以忽略大小写

{

return 403;

}

(3)检测并重新加载

(4)测试user_agent,不同值时的试验

curl -A "Tomato" -x192.168.169.129:80 test.com/upload/1.txt -I

curl -A "Spider/3.0" -x192.168.169.129:80 test.com/upload/1.txt -I

curl -A "123456" -x192.168.169.129:80 test.com/upload/1.txt -I

7ad98b2f68b47102673e06e2ea066c3cef3.jpg

八、Nginx解析php相关配置

1、先创建一个3.php文件

vim /data/wwwroot/test.com/3.php

<?php

phpinfo();

curl -x192.168.169.129:80 test.com/3.php

测试这个3.php文件,直接将源码显示出来了,说明此时不能够解析;

2、进入主机配置文件

vim /usr/local/nginx/conf/vhost/test.com.conf

添加以下配置(配置文件不能写错,否则会出现502码):

location ~ \.php$

{

include fastcgi_params;

fastcgi_pass unix:/tmp/php-fcgi.sock;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;

}

3、检测并重新加载

4、在浏览器测试

60aaa8283082cfe6abf65c5216c526ff12f.jpg

九、Nginx代理

1dc44eeee728a4ca99a31e7dd850a8b63e9.jpg

原理:Nginx代理是一种反向代理。反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

假如这家公司有很多台服务器,为了节省成本,不能为所有的服务器都分配公网IP,而如果一个没有公网的IP的复为其要提供web服务,就可以通过代理来实现,这就是 Nginx比httpd越来越受欢迎的原因

1、创建proxy.conf配置文件,写入以下代码;

cd /usr/local/nginx/conf/vhost

vim proxy.conf

添加以下配置内容:

server

{

listen 80;

server_name ask.apelearn.com;

location /

{

proxy_pass http://121.201.9.155/;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

配置说明:

因为是代理服务器所以不需要访问本地服务器的任何文件; ask.apelearn.com; 定义一个域名;

proxy_pass http:// 121.201.9.155/;真实WEB服务器的IP地址。

$host; 也就是咱们的server_name

2、检测语句并重启

3、访问论坛

curl ask.apelearn.com/robots.txt

访问结果成功

curl -x127.0.0.1:80 ask.apelearn.com -I

HTTP/1.1 200 OK

9e592c47dff98c6d3e95413f269dc81cc38.jpg

转载于:https://my.oschina.net/u/4095803/blog/3050767

【完美复现】面向配电网韧性提升的移动储能预布局与动态调度策略【IEEE33节点】(Matlab代码实现)内容概要:本文介绍了基于IEEE33节点的配电网韧性提升方法,重点研究了移动储能系统的预布局与动态调度策略。通过Matlab代码实现,提出了一种结合预配置和动态调度的两阶段优化模型,旨在应对电网故障或极端事件时快速恢复供电能力。文中采用了多种智能优化算法(如PSO、MPSO、TACPSO、SOA、GA等)进行对比分析,验证所提策略的有效性和优越性。研究不仅关注移动储能单元的初始部署位置,还深入探讨其在故障发生后的动态路径规划与电力支援过程,从而全面提升配电网的韧性水平。; 适合人群:具备电力系统基础知识和Matlab编程能力的研究生、科研人员及从事智能电网、能源系统优化等相关领域的工程技术人员。; 使用场景及目标:①用于科研复现,特别是IEEE顶刊或SCI一区论文中关于配电网韧性、应急电源调度的研究;②支撑电力系统在灾害或故障条件下的恢复力优化设计,提升实际电网应对突发事件的能力;③为移动储能系统在智能配电网中的应用提供理论依据和技术支持。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析,重点关注目标函数建模、约束条件设置以及智能算法的实现细节。同时推荐参考文中提及的MPS预配置与动态调度上下两部分,系统掌握完整的技术路线,并可通过替换不同算法或测试系统进一步拓展研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值