NO END FOR LEARNING

Writing blog if you feel tired | 学海无涯 苦写博客

将Nginx作为Tomcat的反向代理服务器

| Comments

本例子,以mac作为主机:

安装Nginx

通过HomeBrew安装Nginx。

1
$ brew install nginx

然后,运行启动nginx。如果启动遇到问题,使用brew doctor查看下,有可能是没有link(brew link nginx),或者没有文件执行权限(chmod去改)。

1
$ nginx

nginx启动默认是8080端口,所以到 http://localhost:8080 上测试下。mac上nginx.conf的位置在/usr/local/etc/nginx/nginx.conf,也可以通过brew info nginx查看。 因为我们要使用80端口,所以需要修改配置,如下:

1
2
3
4
5
6
7
8
9
10
server {
    listen       8080;
    server_name  localhost;

    #access_log  logs/host.access.log  main;

    location / {
        root   html;
        index  index.html index.htm;
    }

改为:

1
2
3
4
5
6
7
8
9
10
server {
    listen       80;
    server_name  localhost;

    #access_log  logs/host.access.log  main;

    location / {
        root   html;
        index  index.html index.htm;
    }

这个时候,需要sudo去启动nginx了。

1
$ sudo nginx

访问 http://localhost 进行测试,可以看到Nginx的主页。

安装Tomcat

https://tomcat.apache.org/download-80.cgi

运行bin下面的./startup.sh。同样如果没有执行权限,用chmod修改。

1
$ ./startup.sh

默认是8080,访问 http://localhost:8080 可以看到Tomcat的主页。

修改Nginx配置,通过proxy_pass转发80请求到8080

1
2
3
4
5
6
7
8
9
10
11
server {
        listen       80;
        server_name  localhost;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://127.0.0.1:8080;
            root   html;
            index  index.html index.htm;
        }

此时,重启Nginx服务器:

1
2
sudo nginx -s stop
sudo nginx

再次访问 http://localhost 进行测试,就会看到Tomcat的主页了。

参考资料:
1. http://learnaholic.me/2012/10/10/installing-nginx-in-mac-os-x-mountain-lion/
2. https://devtidbits.com/2015/12/08/nginx-as-a-reverse-proxy-to-apache-tomcat/

JS 改变默认行为 e.preventDefault() e.returnValue e.stopPropagation e.cancelBubble Return False

| Comments

事件对象有一些方法可以改变一个元素的默认行为,以及它的祖先元素如何对这个事件作出响应。

有一些事件,比如点击链接或提交表单,会把用户导向另一个页面。为了阻止这类元素的这种默认行为,比如在用户点击链接或提交表单之后还是停留在当前页面,而不是导向新的页面,可以使用事件对象e的preventDefault()。

IE5~IE8有一个同样功能的属性returnValue,如果将其设置为false,就能达到同样的效果。

1
2
3
4
5
if (e.preventDefault) {
  e.preventDefault();
} else {
  e.returnValue = false;
}

处理完某个元素上的事件之后,可能需要阻止这个事件向其祖先元素继续冒泡传播。这时候,可以使用e.stopPropagation()方法。

IE8或更早的IE版本中,使用拥有同样功能的属性e.cancelBubble,将其设置为true可以达到同样的效果。

1
2
3
4
5
if (e.stopPropagation) {
  e.stopPropagation();
} else {
  e.cancelBubble = true;
}

如果你想要同时实现,preventDefault和stopPropagation,可以使用return false。

1
2
3
4
$("a").click(function() {
   $("body").append($(this).attr("href"));
   return false;
}

参考资料:
1.《JavaScript&jQuery交互式Web前端开发》