向世界分享我的生活与见解
To the world to share my life with insights

关于nginx.conf文件的优化—从301重定向说起

最近一不留神入了nginx.conf配置文件的坑,虽然这个坑对于大神们来说都是小case,但是可苦了我这个不怎么懂,在网上搜索教程大神们都是一句话解答,导致看了半天也是似懂非懂,只能做个小白鼠一点一点的来摸索。现在终于走出坑了,特写一篇博文来记录一下,一来以后在遇到这样的问题,自己有详细的教程可以参考;二来也可以为其他入坑的小伙伴指明一下路。


301重定向

什么是网站301重定向?
答:301重定向就是说将网站的域名重新指向另外一个域名或者是网站空间的内容地址,例如当你访问我的网站,在浏览器地址栏中输入xyzbeta.com这个域名的时候他会自动跳转到www.xyzbeta.com这个域名来访问我的网站。这就是301重定向的一种使用方式。

为什么要做301重定向?
答:第一、提升用户体验,例如我在创建虚拟主机作为网站空间的时候,如果我的虚拟主机只绑定了www.xyzbeta.com这个域名,那么当用户输入xyzbeta.com时是无法访问我的网站的。作为访问体验良好的网站,是不应该让用户去区分网站带www和不带www是有区别的。因此这个时候我们就应该做301重定向;第二、利于搜索引擎抓取提高seo,提高网站集权。

如果设置301重定向?
答:如果你的网站没搭建在默认的default文件夹中,而是放在新建的虚拟主机中,那么你应该在/usr/local/ngnix/conf/vhost文件夹中找到配置文件,例如我的是网站的虚拟主机绑定的是www.xyzbeta.com域名,那么在vhost中的文件则是www.xyzbeta.com.conf(根据你的情况,自行选择conf文件然后进行编辑)实现301重定向的代码主要是:

 if ( $host = "xyzbeta.com" ){
 rewrite ^/(.*)$ http://www.xyzbeta.com/$1 permanent;
 }
#这段代码的大体意思就是:如果访问网站的域名是xyzbeta.com那么把他重定向到http://www.xyzbeta.com这个域名来上访问网站
#因此你只要把xyzbeta.com和http://www.xyzbeta.com两个域名改成你自己的需要301重定向的域名就可以了

而这段代码的放置位置就位于你的conf文件中的server内容中,具体如下图所示:

301重定向代码放置实例图

301重定向代码放置实例图

把代码设置好以后,你应该重启nginx服务,并清除浏览器的缓存来测试是否已经实现301重定向。

#重启nginx的命令为:
lnmp nginx restart

安全:简单的防止wordpress的pingback攻击

从建设网站的第一天开始,我们就必须要注重的网站的安全防御,不然你的网站随时都有可能GG,虽然我们无法让自己网站完全远离危险,但我们也要尽所能的去保护他,建设一个网站不容易,就像我一样:曾经凭着兴趣和无脑的热血建设了xyzbeta这个网站,以为会是一片坦途,等入了坑才后悔莫及,没有盈利一分钱,每个月还不断的倒贴。无数次想要放弃,但是看着自己的心血在里面,自己花费了那么大的精力来维护看着它一天天健全又舍不得。所以在这坑请各位大神放一马,小站不易,勿毁人心血
cc攻击是一种成本低廉的攻击方式但是又比较难防,在与他的行为和正常用户的行为很相像,如果规则严格了,可能正常的用户就会受影响,如果规则松了可能就起不到防御的作用。而wordpress的pingback攻击则是一种比较低级的cc攻击,原因就在与他的特征非常明显,很容易和正常用户的行为区分开,所以也更加容易被防御。

#防御代码
if ($http_user_agent ~* (ApacheBench|pingback|WordPress|MJ12bot|AhrefsBot|360JK|PHP|php|Jorgee) ) {return 101;}
if ($http_user_agent = "" ) {return 101;}
if ( $request = "POST /reg.html HTTP/1.1" ) {return 400;}
if ( $request = "POST / HTTP/1.1" ) {return 400;}
if ( $request = "POST / HTTP/1.0" ) {return 400;}
if ( $request = "POST // HTTP/1.0" ) {return 400;}
#作用是nginx检测到相应的条件,就把这个请求直接转出。避免请求数据库和php,减轻服务器的处理负担。
#由于nginx处理静态内容的效率很高,所以可以最大限度的避免服务器资源被耗光。

代码放置的位置同样也是你网站的conf文件server内容中。以我的网站为例那么他就应该放置到/usr/local/ngnix/conf/vhost中的www.xyzbeta.com.confserver内容中,我的网站既做了301重定向又放置了防御pingback的代码,如下图示例:

pingback防御代码放置位置

pingback防御代码放置位置

把代码设置好以后,你应该重启nginx服务,来启动实现代码的功能。

#重启nginx的命令为:
lnmp nginx restart

如果你想接触更高级一点的cc防御知识和功能,你可以查看这篇日志来进行进阶学习CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放


ngnix关闭默认站点

在使用军哥的lnmp一键安装包搭建环境时,在/home/wwwroot/文件中会默认有个default的站点空间,里面放置了探针,phpinfo,phpmyadmin等等文件,这些文件是用来管理系统数据库,查看主机信息等等的。为了不覆盖这些文件,因此我并没有将网站放置在default中而是新建了一个虚拟主机。

而默认情况下,只要将域名解析到vps的IP上,访问该域名就会访问到default的默认页面。这就意味着我的数据库,vps以及php信息是可以轻易的被别人获取的。另外如果别人将未备案的或者是有污点的域名恶意的解析到我的主机上那么出了为问题,我也是需要承担责任的。这对于网站的安全是非常不利的,因此我们必须要对这个默认站点进行一下优化配置。

修改conf文件的具体地址为:/usr/local/nginx/conf/nginx.conf中的server内容。

#只要是我没有绑定的域名解析了我的ip,或者是输入我的ip来访问,那么都不允许访问
server {
listen 80 default_server;
server_name _;
return 500;
}
#当然也可以将return 500;替换为rewrite ^(.*) http://www.xyzbeta.com permanent; 将流量导入到你指定的网站上。

代码修改位置如下图示例:

nginx关闭默认站点

nginx关闭默认站点

注意:关闭默认站点以后,你自己也无法使用ip访问default站点空间中的phpmyadmin文件了,你可以在vhost文件夹中新建一个conf文件,来绑定一个二级域名指向default站点空间实现访问。

把代码设置好以后,你应该重启nginx服务,并清除浏览器缓存来测试功能是否实现。

#重启nginx的命令为:
lnmp nginx restart

解决nginx默认主机关闭无法访问——通过二级域名指向默认主机

上面我们说到应该要关闭lnmp的默认主机,提高安全性。但是有个不好的地方就是我们自己也无法通过ip等方式来访问default站点,这意味着我们自己也无法获取php、vps数据库等的信息了,如果这样的话那完全是杀敌一千自损八百的做法。其实实际中我们还有别的办法来解决这个问题。具体的做法就是:绑定一个只有你自己知道的二级域名来指向default站点,这样我们需要获取信息的时候就直接输入这个域名就可以了。具体的实现方式如下:

/usr/local/nginx/conf/vhost/文件按夹中新增一个conf文件用来绑定二级域名指向default站点。下面具体说明:

假如,我解析了一个二级域名为:123.xyzbeta.com并把这个二级域名指向default站点,那么我可以现在桌面新建一个txt文档,然后在文档中写入如下代码:

#注意我的二级域名放置的位置,把它修改为你准备的二级域名即可,其他不用修改。
server
 {
 listen 80;
 #listen [::]:80;
 server_name 123.xyzbeta.com;
 index index.html index.htm index.php default.html default.htm default.php;
 root /home/wwwroot/default;
 
 include none.conf;
 #error_page 404 /404.html;
 include enable-php.conf;

 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
 {
 expires 30d;
 }

 location ~ .*\.(js|css)?$
 {
 expires 12h;
 }

 location ~ /\.
 {
 deny all;
 }

 access_log /home/wwwlogs/spro.xyzbeta.com.log;
 }

然后保存文档,并将文档重命名为:123.xyzbeta.com.conf做好这些以后将这个文件上传到/usr/local/nginx/conf/vhost/文件夹就可以了。

做好以上事情后,你应该重启nginx服务,并清除浏览器缓存来测试功能是否实现。

#重启nginx的命令为:
lnmp nginx restart

 

未经允许不得转载:维简网 » 关于nginx.conf文件的优化—从301重定向说起

分享到:更多 ()

众享 抢沙发

评论前必须登录!