环境:Ubuntu 8.04.4 LTS \n \l
1.tomcat和jdk已经装好,见我的另一篇博客,这里不再叙述。这里直接写nginx怎么做web服务器的配置,并与tomcat相结合。
2.安装nginx
sudo apt-get install nginx
3.配置nginx
3.1在/etc/nginx/conf.d目录下建一个proxy.conf文件(实现转给tomcat,也即跳转代理的参数配置)
/etc/nginx/conf.d$ vim proxy.conf
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; #获取真实IP
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #获取代理者的真实ip
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
3.2 配置主配置文件nginx.conf,下面是一个配置实例:
user www-data;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
use epoll;
worker_connections 4096;
# multi_accept on;
}
http {
include /etc/nginx/mime.types;
access_log /var/log/nginx/access.log;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
server {
listen 80;
server_name www.abc.com;
location / {
root /home/web/front/www;
index index.do ;
}
location ~ .*.do$ {
index index.do;
proxy_pass http://1.1.1.1:8080;
}
location ~ .*.jsp$ {
index index.jsp;
proxy_pass http://1.1.1.1:8080;
}
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
# mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/NginxImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
# }
解释:
http://1.1.1.1:8080; //1.1.1.1是tomcat的地址,*.do和*.jsp的页面都会转发给1.1.1.1上面的8080端口,也就是转给tomcat。
listen 80; //nginx监听端口
server_name www.abc.com; //虚拟主机的名字(域名)
root /home/web/front/www; //虚拟主机对应的目录
index index.do ; //index.do是索引名称,访问域名时会首先找到这个文件,然后tomcat再去根据这个文件做相应处理、打开页面。
另外一个虚拟主机配置:
server {
listen 80;
server_name passport.abc.com;
location / {
root /home/web/front/passport;
index index.do;
}
location ~ .*.do$ {
index index.do;
proxy_pass http://1.1.1.1:8080;
}
location ~ .*.jsp$ {
index index.jsp;
proxy_pass http://1.1.1.1:8080;
}
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
4.注意事项和总结
index index.do ; //这个索引文件不能用*.do,必须是确定的名字,并且要是对的
配置虚拟主机的时候 sites-enabled 中一定要手动建立软连接,指向虚拟站点目录 sites-available。用sudo a2ensite * 不起作用、、
5.附 location
语法:location [=|~|~*|^~] /uri/ { … }
默认:否
上下文:server
这个指令随URL不同而接受不同的结构。你可以配置使用常规字符串和正则表达式。如果使用正则表达式,你必须使用 ~* 前缀选择不区分大小写的匹配或者 ~ 选择区分大小写的匹配。
确定 哪个location 指令匹配一个特定指令,常规字符串第一个测试。常规字符串匹配请求的开始部分并且区分大小写,最明确的匹配将会被使用(查看下文明白 nginx 怎么确定它)。然后正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索。如果没有找到匹配的正则表达式,使用常规字符串的结果。
有两个方法修改这个行为。第一个方法是使用 “=”前缀,将只执行严格匹配。如果这个查询匹配,那么将停止搜索并立即处理这个请求。例子:如果经常发生”/”请求,那么使用 “location = /” 将加速处理这个请求。
第二个是使用 ^~ 前缀。如果把这个前缀用于一个常规字符串那么告诉nginx 如果路径匹配那么不测试正则表达式。
而且它重要在于 NGINX 做比较没有 URL 编码,所以如果你有一个 URL 链接’/p_w_picpaths/%20/test’ , 那么使用 “p_w_picpaths/ /test” 限定location。
总结,指令按下列顺序被接受:
1. = 前缀的指令严格匹配这个查询。如果找到,停止搜索。
2. 剩下的常规字符串,长的在前。如果这个匹配使用 ^~ 前缀,搜索停止。
3. 正则表达式,按配置文件里的顺序。
4. 如果第三步产生匹配,则使用这个结果。否则使用第二步的匹配结果。
例子:
location = / {
# 只匹配 / 查询。
[ configuration A ]
}
location / {
# 匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。
[ configuration B ]
}
location ^~ /p_w_picpaths/ {
# 匹配任何已 /p_w_picpaths/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
[ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何以gif、jpg 或 jpeg 结尾的请求。然而所有 /p_w_picpaths/ 目录的请求将使用 Configuration C。
[ configuration D ]
}
例子请求:
/ -> configuration A
/documents/document.html -> configuration B
/p_w_picpaths/1.gif -> configuration C
/documents/1.jpg -> configuration D
注意:按任意顺序定义这4个配置结果将仍然一样。