将没有端口号的域名链接到由nginx

时间:2017-04-10 18:48:22

标签: node.js express nginx mean-stack digital-ocean

我在DigitalOcean上有一个Ubuntu服务器,它托管了几个网站。我刚刚在我的mac上构建了一个mean.js堆栈应用程序,我计划将其部署到生产环境,从而部署到现有的服务器上(虽然我不知道是否需要创建另一个像{{3}这样的droplet })。

我跟着here安装了node.jsmongodb等等。然后,我从github克隆了我自己的应用程序:

sudo git clone https://github.com/softtimur/myapp.git /opt/myapp
cd /opt/myapp
sudo npm install
npm start

因此,在浏览器中,通过输入https://xxx.xx.xx.xx:3000/#/home,它可以很好地与服务器通信。

现在,我想使用我从GoDaddy购买的域名(即myapp.io)而不是IP地址与服务器进行通信。

我修改了myapp.io的DNS中的记录,使其指向IP地址。因此,https://www.myapp.io可以很好地引导服务器,但是,默认情况下会导致nginx设置另一个页面。

然后,我按如下方式设置/etc/nginx/sites-available/myapp.io/etc/nginx/sites-enabled/myapp.io

server {
        listen 3000;
        listen [::]:3000;

        root /opt/myopp/;
        index index.php index.html index.htm;

        # Make site accessible from http://localhost/
        server_name myopp.io;

        location / {
                try_files $uri $uri/ =404;
        }

        error_page 404 /404.html;

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
                root /usr/share/nginx/html;
        }

        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
                client_max_body_size 15M;
        }

        location /phpmyadmin {
           root /usr/share/;
           index index.php index.html index.htm;
           location ~ ^/phpmyadmin/(.+\.php)$ {
                   try_files $uri =404;
                   root /usr/share/;
                   fastcgi_pass unix:/var/run/php5-fpm.sock;
                   fastcgi_index index.php;
                   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                   include /etc/nginx/fastcgi_params;
           }
           location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
                   root /usr/share/;
           }
        }
}

重新启动nginx后,npm start会返回错误:Port 3000 is already in use

有人能告诉我这种方法是否正确?如果是,我怎么能修复错误,例如,nginx配置文件?

编辑1:/etc/nginx/sites-avaiable/default,我有

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        root /usr/share/nginx/html;
        index index.php index.html index.htm;

        server_name xxx.xx.xx.x;

1 个答案:

答案 0 :(得分:1)

您要做的是从//www.myapp.io//xxx.xx.xx.xx:3000的反向代理。这是通过侦听端口80(或443)并使用proxy_pass连接在端口3000上运行的服务来实现的。有关详细信息,请参阅this document

对于http服务器,您可以使用:

server {
    listen 80;
    server_name myopp.io;

    location / {
        proxy_set_header    Host                $host;
        proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto   $scheme;
        proxy_set_header    Accept-Encoding     "";
        proxy_set_header    Proxy               "";
        proxy_pass          http://127.0.0.1:3000;
    }
}

显然,您使用的https可以通过更改您的服务以在端口3000上使用http来实现。安装证书并使用nginx终止SSL。有关详情,请参阅this document