NO END FOR LEARNING

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

用Nginx服务静态文件

| Comments

使用Nginx服务静态文件的原因很简单:快。

上一篇文章中 http://benweizhu.github.io/blog/2016/05/21/use-nginx-as-reverse-proxy-for-tomcat/ ,我们使用Nginx作为Tomcat服务器的反向代理服务器,这样比在Tomcat直接配置80端口更加方便。

但是,却没有很好的利用Nginx服务器的特点,即 NGINX | High Performance Load Balancer, Web Server, & Reverse等。

我们可以使用Nginx来服务器静态文件,使用Tomcat来处理JSP的动态文件。配置非常简单,分别使用下面两个配置:

403错误:添加Nginx访问文案件的权限

nginx配置中有一个user选项,默认,nginx配置的是nobody。 http://nginx.org/en/docs/ngx_core_module.html#user

1
2
3
4
5
6
7
8
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

需要将它改为可以访问Tomcat服务器上文件的用户和用户组

1
2
3
4
5
6
7
8
user  yourusername yourusergroup; #比如 benweizhu stuff
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

404错误:使用Alias来配置Static文件路径

1
2
3
4
location /static/ {
  autoindex  on;
  alias /Documents/servers/tomcat/apache-tomcat-8.0.30/webapps/someapp/static; #完整路径
}

Nginx的Wiki推荐使用root字段

1
2
3
4
location /static/ {
  autoindex  on;
  root /Documents/servers/tomcat/apache-tomcat-8.0.30/webapps/someapp; #完整路径
}

参考资料:
1. https://nu2ruby.wordpress.com/2010/04/13/nginx-getgrnam-presmini-failed/
2. http://stackoverflow.com/questions/16808813/nginx-serve-static-file-and-got-403-forbidden
3. http://stackoverflow.com/questions/1474374/nginx-doesnt-serve-static

将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/