代码之家  ›  专栏  ›  技术社区  ›  OLATOMIDE

nginx服务器在自定义端口到节点应用程序上转发请求

  •  0
  • OLATOMIDE  · 技术社区  · 8 年前

    我有一个运行nginx的vps服务器,还有一个运行在端口8000上的node应用程序。nginx服务器容纳了我的php应用程序,并且在默认的web服务器端口上运行良好。

    我有一个指向服务器IP的自定义域名。

    我已经安装了let's encrypt来处理我的https流量,它适用于我的php应用程序。

    我必须捕获端口8080上的https流量并将请求转发到端口8000上的节点应用程序。

    我试过很多东西。我不知道我做错了什么。

    下面是我的nginx服务器块的一个副本。

     server {
           listen [::]:443 ssl ipv6only=on; # managed by Certbot
        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/repairspots.org/fullchain.pem; # managed$
        ssl_certificate_key /etc/letsencrypt/live/repairspots.org/privkey.pem; # manag$
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
        }
    
    
    
    
    // i need to get this portion right
    
    server {
      listen [::]:8080 ssl ipv6only=on; # managed by Certbot
      listen 8080 ssl;
      server_name 0.0.0.0;
    
      ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem; # managed$
      ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem; # manag$
      include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
      ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    
      error_page  497 https://0.0.0.0:8080$request_uri;
    
      # pass requests to port 8000 where our other node server is running
      location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://0.0.0.0:8000;
        proxy_ssl_session_reuse off;
        proxy_set_header Host $http_host;
        proxy_cache_bypass $http_upgrade;
        proxy_redirect off;
      }
    }
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   OLATOMIDE    8 年前

    我能用下面的方法解决这个问题。

    我创建了/etc/nginx/conf.d/proxy.conf并粘贴了下面的服务器块。

    server {
        listen 8080 ssl;
        listen [::]:8080 ssl ipv6only=on;
    
      ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed$
      ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # manag$
      include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
      ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    
      error_page 497  https://$host:$server_port$request_uri;#enforces https redirect on http traffic
    
       location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_ssl_session_reuse off;
            proxy_set_header X-Forwarded-Ssl on; #needed incase redirects comes from http
            proxy_set_header X-NginX-Proxy true;
            rewrite ^/?(.*) /$1 break;
            proxy_pass http://127.0.0.1:8000; #node server
            proxy_redirect off;
    
        }
    
    
    }
    

    这是我以前根本不做的一件事。你需要在你监听的端口上接受网络流量。运行下面的命令与端口号内联。

    sudo iptables -A INPUT -p tcp --dport 9000 -j ACCEPT