質問

I am really confused whether it is possible ? Please help me out, I have Node.js application, say node_app, running on X port, and PHP application, say my_app, running in Apache's default 80 port. I have one domain name only. What my problem is, if user hit domain.com/my_app, it should run the PHP application in 80's port. If the user hits domain.com/node_app, it should run the node application in X port. And one more important constraint is the end-user should not see any port number in URL bar.

役に立ちましたか?

解決

You can install Node.JS and PHP in the same host, using Nginx as proxy per exemple.

Per exemple, with Nginx, you could create two virtualhosts :

  • Default virtual host using PHP (FPM or not) who points to exemple.tld
  • Second virtual host to another node.exemple.tld

First VH is gonna be like this (with PHP-FPM) :

server {
        listen   80; ## listen ipv4 port 80

        root /www;
        index index.php index.html index.htm;

        # Make site accessible from exemple.tld
        server_name exemple.tld;

        location / {
          try_files  $uri $uri/ /index.php;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 and using HHVM or PHP
        #
        location ~ \.(hh|php)$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_keep_conn on;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        }

        location ~ /\.ht {
                deny all;
        }
}

Second VH with NodeJS :

server {
    listen 80;

    server_name node.exemple.tld;

    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_set_header X-NginX-Proxy true;
        access_log off;

        # Assuming that NodeJS listen to port 8888, change if it is listening to another port!
        proxy_pass http://127.0.0.1:8888/;
        proxy_redirect off;

        # Socket.IO Support if needed uncomment
        #proxy_http_version 1.1;
        #proxy_set_header Upgrade $http_upgrade;
        #proxy_set_header Connection "upgrade";
    }

    # IF YOU NEED TO PROXY A SOCKET ON A SPECIFIC DIRECTORY
    location /socket/ {
        # Assuming that the socket is listening the port 9090
            proxy_pass http://127.0.0.1:9090;
    }
}

As you can see, it's possible, and pretty easy to do!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top