在 Nginx 0.6.35 的版本中,配置多个 server 虚拟主机,必须要在配置文档中 http { 里头加上 server_names_hash_bucket_size 64; 这么一句
http {
server_names_hash_bucket_size 64;
include mime.types;
default_type application/octet-stream;
………….省略
}
不然不但 nginx 启动不了,而且 nginx -t 测试配置文档的时候会提示
could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32
2009/02/20 13:54:27 [emerg] 11372#0: the configuration file /opt/nginx/conf/nginx.conf test failed
下面是在中文wiki上摘抄的一段说明
保存服务器名字的hash表是由指令 server_names_hash_max_size 和 server_names_hash_bucket_size所控制的。参数hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。在减少了在内存中的存取次数后,使在处理器中加速查找hash表键值成为可能。如果 hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。第一次是确定存储单元的地址,第二次是在存储单元中查找键 值。因此,如果Nginx给出需要增大 hash max size 或 hash bucket size的提示,那么首要的是增大前一个参数的大小.
#! /bin/bash
datedir=`date +%Y%m%d`
/bin/mkdir /home/logs/$datedir >/dev/null 2>&1
/bin/mv /home/logs/*.log /home/logs/$datedir
#/bin/kill -HUP `cat /var/run/nginx.pid`
有时候有这样的需求,当两个或多个域名都可以访问同一个站点,但是我们想当访问B域名时,使其自动跳转至A域名。其实nginx很容易实现这样的功能:
(以下资料来源于互联网)
nginx中进行301重定向(301 redirect)是非常容易的。比方说要将www.caipanzi.com永久性重定向至caipanzi.com,有两种方法
1.方法A
server {
server_name caipanzi.com www.caipanzi.com;
if ($host != 'caipanzi.com' ) {
rewrite ^/(.*)$ http://caipanzi.com/$1 permanent;
proxy_set_header Host "caipanzi.com";
}
}
2.方法B(为带www的域名单独设一条server规则)
server {
server_name www.caipanzi.com;
rewrite ^(.*) http://caipanzi.com$1 permanent;
}
一、Nginx安装
安装的时候需要注意加上 --with-http_ssl_module,因为http_ssl_module不属于Nginx的基本模块。
Nginx安装方法:
./configure --user=username --group=groupname --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
二、生成证书
$ cd /usr/local/nginx/conf
$ openssl genrsa -des3 -out server.key 1024
$ openssl req -new -key server.key -out server.csr
$ cp server.key server.key.org
$ openssl rsa -in server.key.org -out server.key
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt三、修改Nginx配置:
server
{
listen 443;
server_name test.sina.com.cn;
ssl on;
ssl_certificate /usr/local/nginx/conf/server.crt;
ssl_certificate_key /usr/local/nginx/conf/server.key;
}
之前用Apache的时候,只需要设置
ErrorDocument 404 /404.php
就可以在 404.php 中根据不同的 REQUEST_URI 跳转到不同的页面去,让从搜索引擎过来的失效URL可以跳转到新的地址去
nginx 设置是这样的:
error_page 404 /404.php;
另外也可以通过rewrite规则实现
在 rewrite rule 的最后增加
if (!-e $request_filename) {
rewrite ^(.*)$ /404.php last;
}
关于*.php 文件的跳转请看这里。
log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format main1 '$proxy_add_x_forwarded_for - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"'; //此日志格式为,ip不仅记录代理的ip还记录远程客户端真实IP。
location /NginxStatus {
stub_status on;
access_log on;
# auth_basic "NginxStatus";
# auth_basic_user_file conf/htpasswd; //查看时需要验证
}
注: 以上代码可以加在虚拟主机中的配置文件中
访问:http://域名/NginxStatus/
出处:http://shunz.net/2008/07/nginx_rewrite.html
Nginx以其良好的并发性能,目前正在逐渐取代Apache成为大家的Web server首选,但是Nginx目前的中文资料很少,需要大家努力贡献。
下面我介绍一下Nginx的Rewrite模块设置及Wordpress和Discuz的示例。Nginx的Rewrite规则比Apache的简单灵活多了,从下面介绍可见一斑。
首先,Nginx可以用if进行条件匹配,语法规则类似C,举例如下:
if ($http_user_agent ~ MSIE) {rewrite ^(.*)$ /msie/$1 break;}1、正则表达式匹配,其中:
~ 为区分大小写匹配
~* 为不区分大小写匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
2、文件及目录匹配,其中:
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
如:
if (!-f $request_filename) {proxy_pass http://127.0.0.1;}其次,Nginx的Rewrite规则与Apache几乎完全一致,所不同的是最后的flag标记,举例如下:
rewrite ^/feed/$ http://feed.shunz.net last;
flag标记有:
last 相当于Apache里的[L]标记,表示完成rewrite,不再匹配后面的规则
break 与last类似
redirect 返回302临时重定向
permanent 返回301永久重定向
Wordpress的重定向规则:
if (!-e $request_filename) {rewrite ^/(index|atom|rsd)\.xml$ http://feed.shunz.net last;rewrite ^([_0-9a-zA-Z-]+)?(/wp-.*) $2 last;rewrite ^([_0-9a-zA-Z-]+)?(/.*\.php)$ $2 last;rewrite ^ /index.php last;}
1 首先需要安装apache,可以使用yum install 安装
2 生成密码文件,创建用户
htpasswd -c /usr/local/nginx/conf/htpasswd test // 添加test用户,第一次添加时需要加-c参数,第二次添加时不需要-c参数
3 在nginx的配置文件中添加
location / {
root /data/www/wwwroot/count;
auth_basic "Auth";
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
}
解决方法:打开nginx主配置文件nginx.conf,找到http{}段,添加
client_max_body_size 20m;
vim /usr/local/nginx/sbin/log.conf //写入以下内容
rotate 48
nocompress
/home/logs/access.log {
sharedscripts
create 0644 www www
postrotate
/bin/kill -USR1 `cat /usr/local/nginx/var/nginx.pid`
LDATE=`date +%Y%m%d%H --date="-1 hour"`
/bin/mv /home/logs/access.log.1 /home/logs/${LDATE}-access_log
endscript
}
不說廢話了 直接上傳了,第一章是介紹Nignx 和Nginx和其他web server性能對比的個人認為實用性不強就不上傳了,第13章是HTTP模塊 因為太大了 就不傳了,其實說白了,大家把前幾章搞懂了 就已經不錯了,如果有朋友需要第一章和第十三章的朋友可以留下email或者向我索取,我的email:
[email protected]
首先建立下面的配置文件放在nginx的conf目录下面,命名为deny.ip
cat deny.ip
deny 192.168.1.11;
deny 192.168.1.123;
deny 10.0.1.0/24;
在nginx的配置文件nginx.conf中加入:include deny.ip;
重启一下nginx的服务:/usr/local/nginx/sbin/nginx reload 就可以生效了。
deny.ip 的格式中也可以用deny all;
如果你想实现这样的应用,除了几个IP外,其他全部拒绝,
那需要你在deny.ip 中这样写
allow 1.1.1.1;
allow 1.1.1.2;
deny all;
location ~ .*abc/.*\.php?$
{
deny all;
}
应用的最前端是一台nginx服务器,所有静态的内容都由nginx来处理,而将所有php的请求都分摊到下游的若干台运行php fastcgi守护进程的服务器中,这样可以以一种廉价的方案来实现对系统负载的分摊,扩展系统的负载能力。
三台php fastcgi服务器的ip地址分别为:
172.16.236.110 , 172.16.236.111, 172.16.236.112
运行php fastcgi进程时,需要让php-cgi监听到服务器的局域网地址(分别如上所示),而不是之前一般都是监听的本地地址(127.0.0.1)。以172.16.236.110这台服务器为例:
/usr/local/php5/bin/php-cgi -b 172.16.236.110:9000
或许你用spawn-fcgi来启动php-fcgi,那么就是这样(供参考,其实也就是修改监听的地址和端口即可):
/usr/local/lighttpd/bin/spawn-fcgi -f /usr/local/php5/bin/php-cgi -a 172.16.236.110 -p 9000
又或许你是用php-fpm来管理php-fcgi,那么你需要修改php-fpm的配置:
vi /usr/local/php5/etc/php-fpm.conf
找到这个配置项(其中的地址可能需要根据你自己环境来调整)
<value name="listen_address">127.0.0.1:9000</value>
修改为:
<value name="listen_address">172.16.236.110:9000</value>
修改完毕后,重启你的php-fpm进程。
然后按照上面的步骤,依次修改其他php fastcgi服务器。
php方面的工作暂时就是这些,下面修改nginx。
vi /usr/local/nginx/conf/nginx.conf
在配置文件的http段内增加类似如下的配置:
upstream myfastcgi {
server 172.16.236.110 weight=1;
server 172.16.236.111 weight=1;
server 172.16.236.112 weight=1;
}
我这里三台php fastcgi服务器的权重是相同的,所以其中的weight值都是1,如果你的php fastcgi服务器需要分主次,那么可以通过调整其weight值来达到目的。比如以第一台服务器为主,其他两台为辅,则就是这样:
upstream myfastcgi {
server 172.16.236.110 weight=1;
server 172.16.236.111 weight=2;
server 172.16.236.112 weight=2;
}
然后找到原来nginx关于php fastcgi配置的部分,比如:
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
将其中的fastcgi_pass那一段改为:
fastcgi_pass myfastcgi;
转自:http://xuebingnanmm.javaeye.com/blog/686839
- «
- 1
- ...
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- ...
- 63
- »