部署本地nginx服务器到公共ubuntu 16.04

我正在尝试将我的本地nginx服务器部署到公共场所。 nginx服务器作为我的节点快递应用程序反向代理运行,该应用程序也在端口3000本地运行。 因此,我创build了一个从/ etc / nginx / sites-available / express到/ etc / nginx / sites-enabled / express的符号链接,所以我的configuration文件名为express,看起来像这样。

/ etc / nginx / sites-enabled / express

upstream express_servers{ server 127.0.0.1:3000; } server { listen 80; location / { proxy_pass http://express_servers; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } 

我已经从启用网站的文件夹中删除了默认文件,我没有改变我的nginx.conf文件,看起来像这样

/ etc / nginx / nginx.conf

 user www-data; worker_processes auto; pid /run/nginx.pid; events { worker_connections 768; # multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # SSL Settings ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; gzip_disable "msie6"; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } #mail { # # See sample authentication script at: # # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript # # # auth_http localhost/auth.php; # # pop3_capabilities "TOP" "USER"; # # imap_capabilities "IMAP4rev1" "UIDPLUS"; # # server { # listen localhost:110; # protocol pop3; # proxy on; # } # # server { # listen localhost:143; # protocol imap; # proxy on; # } #} 

我也用ufw(简单的防火墙)改变了我的防火墙设置,允许http访问(特别是nginx)。 我的ufw状态如下所示:

 Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 80/tcp (Nginx HTTP) ALLOW IN Anywhere 80 ALLOW IN Anywhere 80/tcp (Nginx HTTP (v6)) ALLOW IN Anywhere (v6) 80 (v6) ALLOW IN Anywhere (v6) 

当我用wrk或loadtest(npm)运行负载testing时,一切似乎都正常工作。 例如

 wrk -t12 -c50 -d5s http://192.168.178.57/getCats/eng 

所以在本地我可以访问nginx服务器,但是当我尝试从公共服务器(3G / 4G)访问服务器时,我无法访问服务器。 我错过了什么?

编辑:我想通过http:// PUBLIC_IP_ADDR / getCats / eng访问服务,而不是本地地址。

你的nginx配置看起来非常好。

为了能够从外部访问您的服务器,您需要从您的ISP公共静态IP。 此外,ISP不应该阻止传入的流量到端口80和443(如果你决定使用https)。

那么你可能有这样的局域网:

 ISP <---> Router <---> server ^ | ----> your other devices 

在这种情况下,公共IP将被分配给路由器,所有其他设备将具有本地私有ips,如192.168.xx/24 / 10.xxx/8 / 10.xxx/8 / 172.16.0.0/20

您需要配置从路由器到服务器的私有IP的端口转发。 根据路由器的供应商,这个功能可能被称为virtual server ,通常在WAN配置附近。 将其设置为将TCP端口80转发到服务器本地端口80,对于443则是相同的。

你也可能需要配置服务器到静态IP,以便本地IP地址不会改变

我认为你必须把

 listen *:80 

在你的文件/ etc / nginx / sites-enabled / express中

nginx听文档

我认为这是不是现在听你的ISP公共IP的请求。