Linux+Nginx+Tomcat多域名,多应用在同一服务器的配置
Linux+Nginx+Tomcat多域名,多应用在同一服务器的配置
Linux+Nginx+Tomcat 多域名,多应用在同一服务器的整合配置
实现的效果和达到的目的为:
1、有两个域名www.aaa.com www.bbb.com 分别对应两个两个不同的网站,但是公用同一个Nginx和Tomcat服务器;
2、所有的JSP等动态内容转发到Tomcat处理,js、图片等直接由Nginx负责处理;
3、上传的图片不在应用的根目录下面,需要另外指定转发(Nginx Alias 虚拟目录)
以下为示例配置文件:
Tomcat 配置:server.xml
www.aaa.com
unpackWARs="true" autoDeploy="true">
…. ….
#指定虚拟主机 ww.bbb.com
unpackWARs="true" autoDeploy="true">
… ….
Nginx配置:
编辑Nginx安装目录下conf文件夹中的nginx.conf
server { listen 80; server_name www.aaa.com aaa.com; root/data/www/aaa; #设定网站的资源存放路径 indexindex.html index.htm index.jsp; #charset utf-8; access_log /var/log/nginx/aaa.access.log main; location / { index index.html index.htm index.jsp; root /data/www/aaa; proxy_set_header Host www.aaa.com; #此参数重要指向tomcatserver.xml中配置的Host name,以转发给不同的Host处理. proxy_pass http://127.0.0.1:8080; } location ~ /Image/ { #我这里尝试多次只有这种(加“~”)才奏效,关于Nginx虚拟目录其他方式参加后面的参考链接介绍 root /data/www/; } #location ~ .*.jsp$ { #所有jsp的页面均交由tomcat处理 # index index.jsp; # proxy_pass http://127.0.0.1:8080; #转向tomcat处理 # } location~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ #设定访问静态文件直接读取不经过tomcat { expires 30d; } location ~ .*\.(js|css)?$ { expires 1h; } ……. ……. } server { listen 80; server_name www.bbb.com; root/data/www/bbb; #设定网站的资源存放路径 indexindex.html index.htm index.jsp; #charset utf-8; access_log /var/log/nginx/bbb.access.log main; location / { index index.html index.htm index.jsp; root /data/www/bbb; proxy_set_header Host www.bbb.com; proxy_pass http://127.0.0.1:8080; } #location ~ .*.jsp$ { #所有jsp的页面均交由tomcat处理 # index index.jsp; # proxy_pass http://127.0.0.1:8080; #转向tomcat处理 # } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ #设定访问静态文件直接读取不经过tomcat { expires 30d; } location ~ .*\.(js|css)?$ { expires 1h; } … ….【三种Nginx 虚拟目录使用方式,本人验证的结果只有(只有这种(加“~”)才奏效,其他两种方式验证无果)】
Nginx中有alias与root两种标签,最基本的区别是:alias指定的目录是绝对的地址,root是指定目录是相对的上级目录,并且该上级目录要含有location指定名称的同名目录。如:
1 | location /Image{ |
2 | alias /data/Image; |
3 | index index.html index.htm ; |
4 | } |
这种配置下http://localhost/Image 指定的是/data/Image
1 | location /Image { |
2 | root /data/; |
3 | index index.html index.htm ; |
4 | } |
这种配置下,访问http://localhost/Image时,Nginx会去找/data目录下的Image文件夹
Nginx也有与Apache类型的alias功能,示例配置如下
1 | location ~ /Image{ |
2 | root /data/; |
3 | index index.html index.htm; |
4 | } |
Nginx设置alias实现虚拟目录 alias与root的用法区别
Nginx 貌似没有虚拟目录的说法,因为它本来就是完完全全根据目录来设计并工作的。如果非要给nginx安上一个虚拟目录的说法,那就只有alias标签比较"像",干脆来说说alias标签和root标签的区别吧。最基本的区别:alias指定的目录是准确的,root是指定目录的上级目录,并且该上级目录要含有location指定名称的同名目录。另外,根据前文所述,使用alias标签的目录块中不能使用rewrite的break。
说不明白,看下配置:
location /abc/ { alias /home/html/abc/; }
在这段配置下,http://test/abc/a.html就指定的是/home/html/abc/a.html。这段配置亦可改成
location /abc/ { root /home/html/; }
这样,nginx就会去找/home/html/目录下的abc目录了,得到的结果是相同的。但是,如果我把alias的配置改成:
location /abc/ { alias /home/html/def/; }
那么nginx将会从/home/html/def/取数据,这段配置还不能直接使用root配置,如果非要配置,只有在/home/html/下建立一个 def->abc的软link(快捷方式)了。一般情况下,在location /中配置root,在location /other中配置alias是一个好习惯。至于alias和root的区别,我估计还没有说完全,如果在配置时发现奇异问题,不妨把这两者换换试试。
nginx alias的设置
nginx也有像apache的别名功能,格式为:
location ~ /alias { root /home/www/default; index index.php; }
但nginx在处理php脚本时,需要传递给fastcgi才能处理,所以比apache的别名设置多一个,下面我们以phpmyadmin别名设置为例:
location ~ ^/phpmyadmin.+.php$ { root /home/www/default; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /phpmyadmin { root /home/www/default; index index.php; }
评论暂时关闭