刚刚说完Apache,接下来写一下tengine(nginx)。tengine是建立在nginx上的开源软件,添加了一大堆feature,并且你可以使用自定义的内存管理,不管是作为前端代理,还是前端缓存,效果都是萌萌哒的。
nginx和tengine略有差异,请查看官方Wiki、Tengine。
## 根据自己情况选择用户 user nobody; ## 建议设置机器CPU核心数目 worker_processes 1; ## 之前配置机器的时候设置过的打开数目 worker_rlimit_nofile51200; ## 记录错误日志 error_log logs/error.log; ## pid文件 pid logs/nginx.pid; ## 设置最大连接数和使用epoll提高效率 events{ worker_connections 1024; useepoll; } http{ include mime.types; default_type application/octet-stream; ## 打底配置日志 access_log logs/access.log; ## 基础限流 limit_req_zone$binary_remote_addr zone=one:10mrate=1r/s; limit_req_log_level error; ## 允许使用sendfile sendfile on; ## 配合sendfile tcp_nopush on; ## 关闭基础信息 server_info off; ## 根据自己的站点设置 keepalive_timeout 50; ## 开启gzip,这里如果不考虑IE6也没关系的话,不需要根据UA关闭GZIP gzip on; gzip_proxied any; gzip_clear_etag on; gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/javascript; ## 加载站点配置 include vhosts/*; }
和apache一样,简单阻止一些访问,根据自己的情况添加和修改。
# robots.txt 不进行记录 location=/robots.txt{access_log off;log_not_found off;} # favicon.ico 不进行记录 location=/favicon.ico{access_log off;log_not_found off;} # 隐藏文件 不进行记录且禁止访问 location~/\.{access_log off;log_not_found off;deny all;} # 不存在的备份文件 不进行记录且禁止访问 location~*"bbs\.zip"{access_log off;log_not_found off;deny all;} location~*"wwwroot\.zip"{access_log off;log_not_found off;deny all;} location~*".*\.asp$|.*\.aspx$|.*\.jsp$|.*\.mdb|.*\.log"{access_log off;log_not_found off;deny all;} location~*"fckeditor|ckfinder|~root"{access_log off;log_not_found off;deny all;} # ~结尾文件不进行记录且禁止访问 location~~${access_log off;log_not_found off;deny all;} # 设置常用文件缓存为30天 location~.*\.(gif|jpg|jpeg|png|bmp|swf|js|css)${expires30d;} ## # 阻止注入的一些设置 ## location~*"union.*select.*\(|union.*all.*select.*|concat.*\(" { deny all; } ## # 阻止常规利用的一些设置 ## location ~* "proc/self/environ" { deny all; } ## # 阻止垃圾评论的一些设置 ## if ($http_user_agent ~ "\b(ultram|unicauca|valium|v\iagra|vicodin|xanax|ypxaieo|erections|hoodia|huronriveracres|impotence|levitra|libido|ambien|blue\spill|cialis|cocaine|ejaculation|erectile|lipitor|phentermin|pro[sz]ac|sandyauer|tramadol|troyhamby)\b"){return404;} ## # 阻止UA的一些设置 ## set$block_user_agents0; # 拒绝无UA访问 if($http_user_agent~"^$"){set$block_user_agents1;} # 根据自己情况拒绝wget以及curl if($http_user_agent~"Wget|wget|curl|libwww-perl|httplib|WordPress|wordpress|PycURL|POE::Component::Client|InetURL|Microsoft URL Control"){set$block_user_agents1;} if($http_user_agent~"WebCopier|Offline Explorer|Sphider|mail"){set$block_user_agents1;} if($http_user_agent~"Opera/9\.0 \(Windows NT5\.1;U;en\)|Opera/6\.01 \(Windows ME;U\) \[en\]"){set$block_user_agents1;} if($http_user_agent~"Mozilla/3\.0"){set$block_user_agents1;} if($http_user_agent~"DotBot|YandexBot|Superfeedr"){set$block_user_agents1;} if($block_user_agents=1){return404;}
对于默认IP的访问的处理
## # 默认IP地址 ## server{ listen 80default; server_name _; location/{ # 允许哪些 if(自己的条件){ return200; } # 禁止直接访问IP地址 return444; } }
简单配置访问规则,配合hhvm之类的fast-cgi的程序使用,省略配置目录反代等。
这里apache和nginx有个细节差异,apache rewrite -L是强制转向,nginx如果要实现隐性301必须使用代理模式。
## soulteary.com www.soulteary.com server{ listen80; server_name soulteary.com www.soulteary.com; ## 如果做了数据分离,可以去掉。 ## client_max_body_size 10m; access_log/yourpath/www.soulteary.com/logs/access.log; error_log/yourpath/www.soulteary.com/logs/error.log; server_name_in_redirect off; include nginx-security.conf; root/yourpath/www.soulteary.com/public; index index.php index.html index.htm; location~/\.(gif|jpg|png|css|js|ico|swf|svg)${ expires max; } location/{ try_files$uri$uri//index.php?q=$uri&$args; } location~\.(hh|php)${ fastcgi_keep_conn on; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name; include fastcgi_params; } }
使用nginx作为node前端转发时的设定。
当然,如果你的node直接跑在最前端,那么请适当修改,对于IP地址直接取remoteAddress,不要相信转发。
upstreamghost_soulteary_upstream{ server127.0.0.1:2378; keepalive64; } server{ listen80; server_name www.soulteary.im soulteary.im; if_modified_since before; server_name_in_redirect off; include nginx-node-security.conf; location/{ proxy_cache_valid20030m; proxy_cache_valid4041m; proxy_pass http://ghost_soulteary_upstream; proxy_ignore_headersX-Accel-Expires Expires Cache-Control; proxy_ignore_headers Set-Cookie; proxy_hide_header Set-Cookie; proxy_hide_headerX-powered-by; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_set_header Host$http_host; expires10m; } }
如果你只是需要一个简单的静态站点的话,可以使用如下配置:
## www.soulteary.com server{ listen80; server_name www.soulteary.com; access_log/yourpath/www.soulteary.com/logs/access.log; error_log/yourpath/www.soulteary.com/logs/error.log; server_name_in_redirect off; include nginx-security.conf; valid_referers none blocked server_names *.soulteary.com soulteary.com; if($invalid_referer){ rewrite^/"http://www.baidu.com/s?wd=妈妈说不要盗链"last; return404; } root/yourpath/www.soulteary.com/public; index index.html; }
接下来写写network/redis/hhvm/ghost的设置吧。
时间: 2024-11-12 07:12:14