nginx配置静态和nodejs应用程序

时间:2016-09-08 23:25:12

标签: node.js nginx nginx-location

我们有多个nodejs应用程序在不同的端口运行并使用nginx作为代理。由于nginx.conf

中的某些错误的正则表达式,我们在访问静态文件网址时遇到(504)问题

任何人都遇到过类似的网址模式。任何指针都会有所帮助

nginx version 1.8.0

504网关问题

https://localhost:9443/js/app1/index.js
https://localhost:9443/css/app1/index.css

https://localhost:9443/js/app2/index.js
https://localhost:9443/css/app2/index.css

App Url

https://localhost:9443/app1
https://localhost:9443/app2
https://localhost:9443/api/app1
https://localhost:9443/api/app2

nginx.conf

#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;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       9443;
        ssl on;
        ssl_certificate /path/to/ssl_certificate;        # path to your cacert.pem
        ssl_certificate_key /path/to/ssl_certifiatekey;    # path to your privkey.pem
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location /js {
          alias /path/to/static/files;
        }
        location /css {
          alias /path/to/static/files;
        }

        location / {
            proxy_pass https://localhost:8443; #nodejsapp1
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $http_host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_buffering         on;
        }


        location ~ /app1/ {
          proxy_pass https://localhost:8143; #nodejsapp2
          error_page 502 = @fallback;
        }

        location ~ /app2 {
          proxy_pass https://localhost:8343; #nodejsapp3
          error_page 502 = @fallback;
        }

        location @fallback{
            rewrite ^ /maintenance;
            proxy_pass https://localhost:8443;
        }


        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }


    }



    include servers/*;
}

2 个答案:

答案 0 :(得分:0)

显然https://localhost:9443/js/app1/index.js匹配app1的正则表达式,因为它包含文本/app1/

正则表达式位置优先于普通前缀位置,因此在上述情况下不使用location /js块。

阅读the documentation以了解location指令的评估顺序。

您可以使用js修饰符,将css^~位置的优先顺序移动到所有正则表达式位置之上:

location ^~ /js { ... }
location ^~ /css { ... }

这些仍然作为前缀位置,但具有更高的优先级。

答案 1 :(得分:0)

这是我尝试过的,它有效。得到了这篇文章的帮助 nginx - serve only images

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

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       9443;
        ssl on;
        ssl_certificate /path/to/ssl_certificate;        # path to your cacert.pem
        ssl_certificate_key /path/to/ssl_certifiatekey;    # path to your privkey.pem
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location ~* \.(jpg|jpeg|gif|png|bmp|ico|pdf|flv|swf|exe|html|htm|txt|css|js)$ {
            root /path/to/static/files;
            expires 30d;
        }

        location / {
            proxy_pass https://localhost:8443; #nodejsapp1
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $http_host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_buffering         on;
        }


        location ~* /app1/ {
          proxy_pass https://localhost:8143; #nodejsapp2
          error_page 502 = @fallback;
        }

        location ~* /app2 {
          proxy_pass https://localhost:8343; #nodejsapp3
          error_page 502 = @fallback;
        }

        location @fallback{
            rewrite ^ /maintenance;
            proxy_pass https://localhost:8443;
        }


        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }


    }



    include servers/*;
}