Category Archives: Web Server

web服务器相关,包括nginx,apache,php,php-fpm,mysql等一些优化,以及centos,ubuntu,Freebsd等linux和unux服务器知识。

NGINX多层转发或使用CDN之后如何获取用户真实IP

##1.背景知识 1.1. 前提知识点: 关键词:ngx_http_realip_module,HAProxy,反向代理,出口IP 还有nginx中的几个变量: remote_addr 代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器(Nginx,Apache等)就会把remote_addr设为你的机器IP,如果你用了某个代理,那么你的浏览器会先访问这个代理,然后再由这个代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的IP,除非代理将你的IP附在请求header中一起转交给web服务器。 X-Forwarded-For(简称XFF) X-Forwarded-For 是一个 HTTP 扩展头部。HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引入,用来表示 HTTP 请求端真实 IP。如今它已经成为事实上的标准,被各大 HTTP 代理、负载均衡等转发服务广泛使用,并被写入 RFC 7239(Forwarded HTTP Extension)标准之中。 XFF的格式为: X-Forwarded-For: client, proxy1, proxy2 XFF 的内容由「英文逗号 + 空格」隔开的多个部分组成,最开始的是离服务端最远的设备 IP,然后是每一级代理设备的 IP。(注意:如果未经严格处理,可以被伪造) 如果一个 HTTP 请求到达服务器之前,经过了三个代理 Proxy1、Proxy2、Proxy3,IP 分别为 … Continue reading

Posted in Web Server | Tagged , , , | 1 Comment

针对Yii框架的nginx配置

我曾经针对yii制作了 个nginx配置,其中包括了以下几项内容: rewrite规则(try_file),需要nginx0.8.6版本以上支持。 针对于icon, robots.txt文件的日志优化 .svn, .git,等版本控制文件的忽略,以及Mac本身索引文件目录 Yii框架本身应该禁止web访问的目录。 图片等静态文件缓存优化 在这里分享一下demo server { listen 80; server_name youdomain.com; index index.html index.htm index.php; root /home/wwwroot/htdocs/yii-1.1.8.r3324/demos/blog; #charset koi8-r; # 这里的main,是nginx默认的httpd段的一个日志格式定义 access_log /home/wwwlogs/localhost.access.log main; #error_page 404 /404.html; # redirect server error pages to the static … Continue reading

Posted in Web Server | Tagged , | 2 Comments

Nginx gzip参数详解

这个模块支持在线实时压缩输出数据流 _ _使用范例_ _ gzip on; gzip_min_length 1000; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain application/xml; gzip 语法: gzip on|off 默认值: gzip off 作用域: http, server, location, if (x) location 开启或者关闭gzip模块 gzip_buffers 语法: gzip_buffers number size 默认值: gzip_buffers 4 4k/8k 作用域: http, server, location 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 … Continue reading

Posted in Web Server | Tagged | 2 Comments

nginx rewirte 规则出现emerg错误解决

nginx的rewrite规则中,如果包含大括号,则需要将此条规则中的匹配项用引号包含起来,否则会出现错误。 如: rewrite ^/([a-zA-Z]{1,50})/api/([a-zA-Z]{1,50})$ /api/api.php?a=$1&t=$2; 如上面这条规则,用nginx -t测试规则是否成功时会出现以下错误: [emerg]: directive “rewrite” is not terminated by “;” 正确的应该是这样的 rewrite “^/([a-zA-Z]{1,50})/api/([a-zA-Z]{1,50})$” /api/api.php?a=$1&t=$2; 用引号将包含大括号的规则包含起来,就不会出错了。

Posted in Web Server | Tagged , | Leave a comment

google apache 加速模块 mod-pagespeed

Google推出mod-pagespeed免费模块用于优化Apache HTTP服务器框架下的网站速度。该模块从多个方面对服务器运行速度进行优化,例如可以对图片进行再压缩,通过CMS(内容管理系统)改变网页构造但不改变CMS本身等。在此次开源之前,Google内部也一直使用该模块。 如果你在安装的时候出现 Public key for mod-pagespeed-beta_current_i386.rpm is not installed 则需要导入Google Public key: wget https://dl-ssl.google.com/linux/linux_signing_key.pub rpm –import linux_signing_key.pub 或者 rpm –import http://dl.google.com/linux/linux_signing_key.pub OK,现在开始安装mod-pagespeed

Posted in Linux & FreeBSD, Web Server | Tagged | Leave a comment

htpasswd 命令用法

htpasswd建立和更新存储用户名、密码的文本文件, 用于对HTTP用户的basic认证。 如果htpasswd不能存取文件, 比如,不能写入到输出文件中,或者读取需要更新的文件, 它将不做任何改变,并返回一个出错代码。 htpasswd使用专为Apache作了修改的MD5或系统函数crypt()加密密码。 htpasswd所管理的文件可以包含两种类型的密码; 有些用户的密码使用MD5加密的,而同一个文件中的其他用户是用crypt()加密的。 概要 在linux下执行htpasswd 可出现如下提示: htpasswd [-cmdpsD] passwordfile username htpasswd -b[cmdpsD] passwordfile username password htpasswd -n[mdps] username htpasswd -nb[mdps] username password

Posted in Linux & FreeBSD, Web Server | Tagged , , | 2 Comments

nginx关闭默认站点(主机)或引导转向

无论是中国大陆变态的“监管”还是为抵制垃圾访问,我们都应该关闭nginx的默认站点,或者把这些垃圾流量转化为你的流量,让它跳转到你指定的网站。 对于nginx来说,即使是访问服务器上不存在的域名时,nginx也会返回一个出错页面“bad hostname”之类的。 解决方法是在nginx的配置文件中(nginx.conf)加入一个处理默认(就是不符合其他任何已有的vhost)server的项目: server { listen 80 default_server; server_name _; return 444; }

Posted in Web Server | Tagged | Leave a comment

使用awstats自动分析Nginx日志

使用awstats可以分析apache日志,同样也可以分析nginx日志。本文将详细介绍自动定时切割nginx的访问日志,并使用awstats来定时分析nginx的日志的实现方法。 前言 本文中使用的是awstats 7.0版本。 此版本增加了对win7的支持以及一些更新的特性。 New features/improvements: – Detect Windows 7. – Can format numbers according to language. – More mime types. – Added geoip_asn_maxmind plugin. – Geoip Maxmind city plugin have now override file capabilities to complete missing entries … Continue reading

Posted in Linux & FreeBSD, Web Server | Tagged , | 14 Comments

nginx目录设置 alias 和 root

使用nginx设置root时要注意一个问题,就是如果该root设置的前端目录不是根目录,那么在写root的绝对地址时,要把前端目录的部分省略掉。 我们用设置虚拟目录指向的alias来和root比较一下就非常明显了 alias location /abc/ { alias /home/html/abc/; } 在这段配置下,http://test/abc/a.html就指定的是 /home/html/abc/a.html。这段配置亦可改成 root location /abc/ { root /home/html/; } 可以看到,使用root设置目录的绝对路径时,少了/abc,也就是说,使用root来设置前端非根目录时,nginx会组合root和location的路径。 另外,使用alias时目录名后面一定要加“/”

Posted in Linux & FreeBSD, Web Server | Tagged | 1 Comment

用nginx的反向代理搭建twitter API

以前用rabr这个第三方网页版客户端。由于不能再使用base认证,同时oauth认证居然也有问题。所以决定使用桌面版客户端加第三方twitter API. 本来想搭建一个php版的第三方twitter API.没想到发现nginx可以做反向代理。哈哈,以前没用过。用nginx做反向代理,比php的快多了。 使用如下例的nginx配置,可以迅速搭建一个基于nginx反向代理的twitter api.包括twitter search api. 将下面的api.twitter.me 和search.twitter.me换成你的域名。日志目录什么的,根据你的情况来定。 server { listen 80; server_name api.twitter.me; access_log /var/log/nginx/api.twitter.me.access_log; location / { proxy_pass http://twitter.com/; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen 80; server_name search.twitter.me; access_log … Continue reading

Posted in Linux & FreeBSD, Web Server | Tagged | 4 Comments