海运的博客

Nginx配置透明代理缓存服务器

发布时间:April 22, 2012 // 分类:Nginx // 5 Comments

之前有介绍过Squid构建透明代理缓存服务器Nginx就比较全能了,做为透明代理也不错。
修改Nginx配置文件,在http段添加:

proxy_cache_path /path/proxy_cache levels=1:2 keys_zone=cache_one:30m inactive=10d max_size=10g;
#定义缓存名称cache_one,2级目录,内存缓存30M,硬盘10G,10未访问内容删除
proxy_temp_path /path/proxy_tmp;

server段配置:

server {
    listen 3128;
    resolver 8.8.8.8;
    proxy_cache cache_one;
    proxy_max_temp_file_size 10m;
 
    location / {
        proxy_pass http://$host$request_uri;
        proxy_connect_timeout   60;
        proxy_send_timeout     60;
        proxy_read_timeout     60;
    }
        
         location ~ .*\.(php|jsp|cgi|asp)?$ {
                 proxy_pass http://$host$request_uri;
               }
}

Iptables配置:

iptables -t nat -A PREROUTING -i br-lan -p tcp  --dport 80 -j REDIRECT --to-ports 3128

Nginx/Lnmp错误502 Bad Gateway解决方法

发布时间:April 15, 2012 // 分类:Nginx // No Comments

由于Nginx处理php反代到后端php-cgi处理,如未收到回应会输出502 Bad Gateway,可优化配置防止出现此类情况。
也可以新建脚本监控lnmp出现502 Bad Gateway自动重启lnmp
1.调整nginx与php-cgi通信方式,默认为unix-sock,更改为较稳定的TCP方式。

#https://www.haiyun.me
sed -i 's/\/tmp\/php-cgi.sock/127.0.0.1:9000/' /usr/local/php/etc/php-fpm.conf 
#设置TCP监听127.0.0.1:9000
sed -i 's/unix:\/tmp\/php-cgi.sock/127.0.0.1:9000/' /usr/local/nginx/conf/nginx.conf
sed -i 's/unix:\/tmp\/php-cgi.sock/127.0.0.1:9000/' /usr/local/nginx/conf/vhost/*
#设置nginx反代

2.修改php-cgi进程数量,每个php-cgi进程占用15M左右内存,由于lnmp为小内存优化,默认开启5个php-cgi进程,可根据自己情况适量增加,不要让系统因为内存不足而当掉。

sed -i 's/max_children">.</max_children">8</'  /usr/local/php/etc/php-fpm.conf
#调整为8个
/root/lnmp restart #t重启lnmp

3.修改超时时间,lnmp已优化设置。

分析nginx日记用iptables封IP防CC

发布时间:April 14, 2012 // 分类:Shell,网络安全 // 3 Comments

此方法用于被动分析nginx日记找出请求数较大的IP,并用iptables封掉,如需主动限制,可参考通过nginx限制ip连接数防CC

#!/bin/bash
#Created by https://www.haiyun.me
num=100 #上限
cd /home/wwwlogs
for i in `tail access.log -n 1000|awk '{print $1}'|sort|uniq -c|sort -rn|awk '{if ($1>$num){print $2}}'`
#读取最新1000条记录,如果单IP超过100条就封掉。
do
      iptables -I INPUT -p tcp -s $i --dport 80 -j DROP
done

加入crontab计划任务

crontab -e
*/5 * * * * sh /path/file.sh #5分钟执行一次

Nginx安装配置防盗链模块nginx-accesskey

发布时间:April 13, 2012 // 分类:Nginx // No Comments

之前有介绍通过Nginx通过referer防盗链,此方法设置简单,不过referer信息可以伪造,不能达到完全防盗链的目的。
为追求完美可以使用nginx-accesskey模块防盗链,nginx-accesskey会根据不同的请求IP生成不同的key,拒绝无效的请求,经测试可防迅雷盗链。
安装需重新编译Nginx增加nginx-accesskey模块,Lnmp请参考Lnmp平滑升级及修改Nginx版本号
下载Nginx和nginx-accesskey

wget http://nginx.org/download/nginx-1.0.15.tar.gz
tar zxvf nginx-1.0.15.tar.gz 
cd nginx-1.0.15
wget http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.gz
tar zxvf Nginx-accesskey-2.0.3.tar.gz 

修改Nginx-accesskey配置文件:

vim nginx-accesskey-2.0.3/config 
#修改$HTTP_ACCESSKEY_MODULE为ngx_http_accesskey_module
USE_MD5=YES
USE_SHA1=YES
ngx_addon_name=ngx_http_accesskey_module
HTTP_MODULES="$HTTP_MODULES ngx_http_accesskey_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_accesskey_module.c"

编译安装Nginx:

 ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module \
--with-http_ssl_module --with-http_gzip_static_module --with-ipv6 --add-module=./nginx-accesskey-2.0.3/
make 
make install

编辑Nginx配置文件,添加:

#location / {       #限制相应目录
location ~ .*\.(7z|iso|msi|tar|zip|rar|gz|exe)$ {        #或限制相应文件
accesskey             on;
accesskey_hashmethod  md5;
accesskey_arg         "key";
accesskey_signature   "pass$remote_addr";      #pass为干扰码,可自定义修改
}

Nginx防盗链应用测试:

<?
$ipkey= md5("pass".$_SERVER['REMOTE_ADDR']);
echo "<a href=file.rar>file</a><br />";
echo "<a href=file.rar?key=".$ipkey.">file.rar?key=".$ipkey.">file</a><br />";
?>

Lnmp平滑升级及修改Nginx版本号

发布时间:April 13, 2012 // 分类:Nginx // No Comments

首先下载官方stable稳定版,当前最新stable版是1.0.15。

cd /usr/local/src/
wget http://nginx.org/download/nginx-1.0.15.tar.gz
tar zxvf nginx-1.0.15.tar.gz
cd nginx-1.0.15

修改源码,更改nginx版本信息。

vim src/core/nginx.h
#define NGINX_VERSION      "1.0.15" #版本号可自定义修改
#define NGINX_VER          "nginx/" NGINX_VERSION #nginx可自定义修改

例如修改为:

vim src/core/nginx.h
#define NGINX_VERSION      "1.0.0" 
#define NGINX_VER          "ows/" NGINX_VERSION 

修改:

vim src/http/ngx_http_header_filter_module.c
static char ngx_http_server_string[] = "Server: nginx" CRLF;

修改:

vim src/http/ngx_http_special_response.c
"<hr><center>nginx</center>" CRLF  

优化编译,去除DEBUG。

vim auto/cc/gcc
# debug
CFLAGS="$CFLAGS -g" #注释此行或删除

升级编译最好以原来编译的参数编译,查看原先编译的参数:

/usr/local/nginx/sbin/nginx -V

编译安装:

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6
make #make后先不要make install
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old #备份旧程序
cp objs/nginx /usr/local/nginx/sbin/nginx #复制新程序至程序目录
/usr/local/nginx/sbin/nginx -t #测试是否有问题
make upgrade  #完成升级
/usr/local/nginx/sbin/nginx -v #查看升级后的版本号
分类
最新文章
最近回复
  • opnfense: 谢谢博主!!!解决问题了!!!我之前一直以为内置的odhcp6就是唯一管理ipv6的方式
  • liyk: 这个方法获取的IPv6大概20分钟之后就会失效,默认路由先消失,然后Global IPV6再消失
  • 海运: 不好意思,没有。
  • zongboa: 您好,請問一下有immortalwrt設定guest Wi-Fi的GUI教學嗎?感謝您。
  • 海运: 恩山有很多。
  • swsend: 大佬可以分享一下固件吗,谢谢。
  • Jimmy: 方法一 nghtp3步骤需要改成如下才能编译成功: git clone https://git...
  • 海运: 地址格式和udpxy一样,udpxy和msd_lite能用这个就能用。
  • 1: 怎么用 编译后的程序在家里路由器内任意一台设备上运行就可以吗?比如笔记本电脑 m参数是笔记本的...
  • 孤狼: ups_status_set: seems that UPS [BK650M2-CH] is ...