Announcement

Collapse
No announcement yet.

Scaleway's EPYC Powered Cloud Is Delivering Competitive Performance & Incredible Value

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #21
    Originally posted by atomsymbol View Post

    Thank you for your suggestion, but it does not suit my needs.
    No worries Just out of curiosity - what are your needs that clash with this approach?

    Comment


    • #22
      Originally posted by dkasak View Post
      No worries Just out of curiosity - what are your needs that clash with this approach?
      I have a small HTTP/HTTPS web server implemented in Go that dispatches URLs to different code/data paths depending on request's IP address and depending on URL's path. I am not forwarding requests to different executables (via Linux sockets or pipes), and if that need might arise in the future I believe it won't be hard to implement in Go. nginx or apache would unnecessarily increase the complexity of the server without improving its function.

      Comment


      • #23
        Originally posted by atomsymbol View Post

        I have a small HTTP/HTTPS web server implemented in Go that dispatches URLs to different code/data paths depending on request's IP address and depending on URL's path. I am not forwarding requests to different executables (via Linux sockets or pipes), and if that need might arise in the future I believe it won't be hard to implement in Go. nginx or apache would unnecessarily increase the complexity of the server without improving its function.
        Ah! Well if you've hard-coded the IP address thing into your design, then yeah, not much else will fit.

        Comment


        • #24
          Originally posted by dkasak View Post
          Ah! Well if you've hard-coded the IP address thing into your design, then yeah, not much else will fit.
          IP addresses is are parameters.

          Comment


          • #25
            Originally posted by atomsymbol View Post

            IP addresses is are parameters.
            Sure, but you've locked in the requirement that there be a 1:1 relationship between 'services' and IP addresses, right? As a couple of us have noted, the standard approach is to map different URL paths to different ports, thereby only requiring 1 IP address. As you've discovered, having multiple IPs can cost you ...

            Comment


            • #26
              Originally posted by dkasak View Post
              As a couple of us have noted, the standard approach is to map different URL paths to different ports, thereby only requiring 1 IP address.
              How are you proposing to enable both "wget http://100.100.100.100:80/index.html" and "wget http://200.200.200.200:80/index.html" if you allocate only a single public IP address?

              Comment


              • #27
                I've been using scaleway for more than 1 year, and i'm impressed, price, performance, quality, everything is there

                And Unlimited bandwidth !!!!!! what else do you need ?

                Comment


                • #28
                  Originally posted by atomsymbol View Post

                  How are you proposing to enable both "wget http://100.100.100.100:80/index.html" and "wget http://200.200.200.200:80/index.html" if you allocate only a single public IP address?
                  OK, OK. Once more ...

                  So firstly, you come up with some mapping scheme. Here's one example. Let's say the 1st part of the URI will be something for your proxy to consume and act on, and that by convention, it will start wtih a 'p_' ( which I'll nominate as meaning 'proxy hint' ). The next part will be a port offset ... and let's say the backend port numbers start at 10000. So, for example:

                  p_100 will mean "proxy this request to port 10100 ( ie 10000 - our base port, plus 100, which is our offset ).
                  p_200 will mean "proxy this request to port 10100 ( ie 10000 - our base port, plus 200, which is our offset ).

                  ---

                  So http://100.100.100.100:80/index.html you'd expose externally as:
                  http://100.100.100.100:80/p_100/index.html
                  ... and the service which used to listen on 100.100.100.100:80 would be running on 100.100.100.100:10100

                  Another way of expressing this is:
                  /p_100 ==> 127.0.0.1:10100, or:
                  /p_100 ==> 100.100.100.100:10100

                  Then http://200.200.200.200:80/index.html you'd expose externally as:
                  http://100.100.100.100:80/p_200/index.html
                  ... and the service which used to listen on 200.200.200.200:80 would be running on 100.100.100.100:10200

                  Another way of expressing this is:
                  /p_200 ==> 127.0.0.1:10200, or:
                  /p_200 ==> 100.100.100.100:10200

                  ---

                  The proxy could modify the URI on the way through ( eg strip out the proxy hint ... which you might do in a regular expression ... eg:
                  s/\/p_[\d]*\//

                  This would mean that the backend services wouldn't have to be altered to know about the leading proxy hint in the incoming requests.

                  ---

                  This is but 1 mapping scheme. You can come up with your own. I used numbers in the mapping scheme because it makes it pretty explicit what's happening. Other people use more descriptive mapping URI components, like:

                  /auth ==> 10100
                  /products ==> 10101
                  /users ==> 10102

                  ... etc.

                  You obviously need to regenerate all your URLs. There is no way to switch to using a single IP without regenerating your URLs. But the end result is much more flexible, and frankly, it's the way everybody does it. When your site becomes busy enough to warrant expanding onto >1 server ( say your products service is getting hammered ), then you just deploy the service on another host, and update your proxy rules to know about the new location to map to ... ie you don't need to rewrite any end-user-facing URLs to make backend changes.

                  There are lots of proxies. nginx is popular, fast, often used for this kind of thing, and does https termination. haproxy would be another option.

                  Comment


                  • #29
                    Originally posted by dkasak View Post

                    OK, OK. Once more ...

                    So firstly, you come up with some mapping scheme. Here's one example. Let's say the 1st part of the URI will be something for your proxy to consume and act on, and that by convention, it will start wtih a 'p_' ( which I'll nominate as meaning 'proxy hint' ). The next part will be a port offset ... and let's say the backend port numbers start at 10000. So, for example:

                    p_100 will mean "proxy this request to port 10100 ( ie 10000 - our base port, plus 100, which is our offset ).
                    p_200 will mean "proxy this request to port 10100 ( ie 10000 - our base port, plus 200, which is our offset ).

                    ---

                    So http://100.100.100.100:80/index.html you'd expose externally as:
                    http://100.100.100.100:80/p_100/index.html
                    ... and the service which used to listen on 100.100.100.100:80 would be running on 100.100.100.100:10100

                    Another way of expressing this is:
                    /p_100 ==> 127.0.0.1:10100, or:
                    /p_100 ==> 100.100.100.100:10100

                    Then http://200.200.200.200:80/index.html you'd expose externally as:
                    http://100.100.100.100:80/p_200/index.html
                    ... and the service which used to listen on 200.200.200.200:80 would be running on 100.100.100.100:10200

                    Another way of expressing this is:
                    /p_200 ==> 127.0.0.1:10200, or:
                    /p_200 ==> 100.100.100.100:10200

                    ---

                    The proxy could modify the URI on the way through ( eg strip out the proxy hint ... which you might do in a regular expression ... eg:
                    s/\/p_[\d]*\//

                    This would mean that the backend services wouldn't have to be altered to know about the leading proxy hint in the incoming requests.

                    ---

                    This is but 1 mapping scheme. You can come up with your own. I used numbers in the mapping scheme because it makes it pretty explicit what's happening. Other people use more descriptive mapping URI components, like:

                    /auth ==> 10100
                    /products ==> 10101
                    /users ==> 10102

                    ... etc.

                    You obviously need to regenerate all your URLs. There is no way to switch to using a single IP without regenerating your URLs. But the end result is much more flexible, and frankly, it's the way everybody does it. When your site becomes busy enough to warrant expanding onto >1 server ( say your products service is getting hammered ), then you just deploy the service on another host, and update your proxy rules to know about the new location to map to ... ie you don't need to rewrite any end-user-facing URLs to make backend changes.

                    There are lots of proxies. nginx is popular, fast, often used for this kind of thing, and does https termination. haproxy would be another option.
                    You are proposing to "regenerate" anandtech.com and phoronix.com into anandronix.com/tech and anandronix.com/phoro! It is possible in theory, but unlikely to happen in practice.

                    Comment


                    • #30
                      Originally posted by atomsymbol View Post

                      You are proposing to "regenerate" anandtech.com and phoronix.com into anandronix.com/tech and anandronix.com/phoro! It is possible in theory, but unlikely to happen in practice.
                      Oh dear No need for all bold. Just be clear what you're trying to do. You were originally talking about services with hard-coded IPs, and now you're hosting domains? I'm pretty sure you don't host anandtech.com and phoronix.com. But if you're running different domains, then you'd just use something like apache virtual hosts. I do this myself - I host a handful of sites ( my own blog, some charity stuff, a friend's blog ), all off the 1 server & IP, using apache virtual hosts.

                      If these things are real world issues for you, then hurry up and learn how it's done before people realise they're flying blind

                      Comment

                      Working...
                      X