{"id":27,"date":"2026-07-26T11:21:36","date_gmt":"2026-07-26T11:21:36","guid":{"rendered":"https:\/\/aleksander.kaasik.blog\/et\/?p=27"},"modified":"2026-07-26T16:02:31","modified_gmt":"2026-07-26T16:02:31","slug":"mitme-minecrafti-serveri-uhekordne-port","status":"publish","type":"post","link":"https:\/\/aleksander.kaasik.blog\/et\/mitme-minecrafti-serveri-uhekordne-port\/","title":{"rendered":"Mitme Minecrafti serveri \u00fchekordne port"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">After hosting couple of Minecraft servers for friends and family. I was giving them an IP and port to the servers, after creating couple different server some vanilla and modded servers. Every time creating a new server, I needed to configured a port forward rule, on router. I was starting to get annoyed by it, and having specifying port number.<br>I want have a neater IP without specifying a port, and using domain names specify specific server, and if I want to run 2 dedicated server and have multiple Minecraft server, I had to remember, what public ports were assign to which machine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Install HAProxy using your distribution\u2019s package manager:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ubuntu and Debian:<br><code>apt install haproxy<\/code><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Arch Linux:<br><code>pacman -S haproxy<\/code><\/li>\n\n\n\n<li>Fedora Linux:<br><code>dnf install haproxy<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">After installing HAProxy, navigate to the configuration directory:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/etc\/haproxy\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">It\u2019s a good idea to back up the default configuration file before making changes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mv haproxy.cfg haproxy.cfg.bak\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now create a new <code>haproxy.cfg<\/code> file.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>frontend minecraft\n    bind *:25565\n    mode tcp\n    tcp-request inspect-delay 5s\n\n    acl is_mc_vanilla payload(4,21) -m sub vanilla.example.home\n    acl is_mc_creative payload(4,22) -m sub creative.example.home\n    acl is_mc_modded payload(4,20) -m sub modded.example.home\n\n    tcp-request content accept if is_mc_vanilla || is_mc_creative || is_mc_modded\n\n    use_backend vanilla_backend if is_mc_vanilla\n    use_backend creative_backend if is_mc_creative\n    use_backend modded_backend if is_mc_modded\n\nbackend mc_vanilla_backend\n    server mc_vanilla 192.168.1.5:25565\n    \nbackend mc_creative_backend\n    server mc_creative 192.168.1.5:25566\n    \nbackend mc_modded_backend\n    server mc_modded 192.168.1.7:25565\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The function <code>payload(Offset, Length)<\/code>. takes two parameters:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Offset<\/strong>: The starting position of the scan.<\/li>\n\n\n\n<li><strong>Length<\/strong>: Determinant how many bytes will be scanned.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Note:<\/strong><br>When calculating <code>Length<\/code>, you must add <strong>+1 byte<\/strong> to the domain length.<br>This ensures the full domain is scanned correctly.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Now after configuring proxy, now If I add a new server in the future, I don&#8217;t have to remember what port was assign on my router, I just need to remember what domain was assign.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here some option quick characters counter<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Linux and MacOS bash:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo \"example.com\" | wc -c\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Windows PowerShell:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo ((\"example.com\".Length + 1))\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Python option:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>print(len(\"example.com\")+1)\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>After hosting couple of Minecraft servers for friends and family. I was giving them an IP and port to the servers, after creating couple different server some vanilla and modded servers. Every time creating a new server, I needed to configured a port forward rule, on router. I was starting to get annoyed by it, &#8230; <a title=\"Mitme Minecrafti serveri \u00fchekordne port\" class=\"read-more\" href=\"https:\/\/aleksander.kaasik.blog\/et\/mitme-minecrafti-serveri-uhekordne-port\/\" aria-label=\"Read more about Mitme Minecrafti serveri \u00fchekordne port\">Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,10,12],"tags":[],"class_list":["post-27","post","type-post","status-publish","format-standard","hentry","category-linux","category-post","category-programmeerimine"],"_links":{"self":[{"href":"https:\/\/aleksander.kaasik.blog\/et\/wp-json\/wp\/v2\/posts\/27","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aleksander.kaasik.blog\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aleksander.kaasik.blog\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aleksander.kaasik.blog\/et\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/aleksander.kaasik.blog\/et\/wp-json\/wp\/v2\/comments?post=27"}],"version-history":[{"count":1,"href":"https:\/\/aleksander.kaasik.blog\/et\/wp-json\/wp\/v2\/posts\/27\/revisions"}],"predecessor-version":[{"id":28,"href":"https:\/\/aleksander.kaasik.blog\/et\/wp-json\/wp\/v2\/posts\/27\/revisions\/28"}],"wp:attachment":[{"href":"https:\/\/aleksander.kaasik.blog\/et\/wp-json\/wp\/v2\/media?parent=27"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aleksander.kaasik.blog\/et\/wp-json\/wp\/v2\/categories?post=27"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aleksander.kaasik.blog\/et\/wp-json\/wp\/v2\/tags?post=27"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}