I created one Nginx with one Linux Azure VM, is it possible to make nginx listen to different ports so that when I change the port number, the content would be different. I found there would be a collision if I created two or more ports related to HTTP on VM. Can anyone help me with that?
Asked
Active
Viewed 2.4e+01k times
2 Answers
252
You can also do the following:
server {
listen 80;
listen 8000;
server_name example.org;
root /var/www/;
}
Felix
- 2,545
- 2
- 8
- 2
-
2This is great. In particular, being able to change the server config in only one server context seems far superior than risking changing one and leaving the other unchanged... – Aaron Sofaer Jul 02 '18 at 22:56
-
16This does not answer the question asked by @billcyz. He asked for different ports and *different content*. This answer gives different ports with the *same content*. – Isaac Sutherland Aug 24 '18 at 03:26
-
2@Krishnendu: "much more convenient"? more convenient than what? This doesn't answer the OP question. In that case, both :80 and :8000 point to same content. OP asked explicitly "when I change the port number, the content would be different". So, post from Craig Miskell answers much better to the question than this one – cedbeu Oct 03 '18 at 06:56
-
6@cedbeu: Yes you are right in context of the question asked Craig Miskell answer is more appropriate. I was looking for the other solution where I need to serve same content on multiple port, this was the exactly what I needed. Again for given question asked other ans is more appropriate, Sorry if I mislead some one, It was a honest mistake from my side. – Krishnendu Oct 04 '18 at 09:05
-
@Krishnendu no problem :) everything clarified now – cedbeu Oct 04 '18 at 12:32
-
1The specific question was to serve different content on different ports, this answer does not achieve that. – Brunis Dec 06 '19 at 12:35
133
Yes, it is.
What you probably want is multiple "server" stanzas, each with a different port, but possibly (probably?) the same server_name, serving the "different" content appropriately within each one, maybe with a different document root in each server.
Full documentation is here: http://nginx.org/en/docs/http/server_names.html
Example:
server {
listen 80;
server_name example.org www.example.org;
root /var/www/port80/
}
server {
listen 81;
server_name example.org www.example.org;
root /var/www/port81/
}
Craig Miskell
- 4,086
- 1
- 15
- 16
-
36It's annoying that one can't do `listen 80 81;` isn't it? Oh well... – Matt Fletcher Nov 27 '15 at 13:41
-
3@MattFletcher It is possible to do something similar, see Felix's comment: http://serverfault.com/a/755791/308219 – PaulMest Nov 01 '16 at 18:36
-
I have to do this with IP address instead of domain name, I have created 2 files in `sites-available` but it is not working in my case. – Muhammad Dec 27 '19 at 06:07
-
-
-
No, with the configuration above the content in /var/www/port80 would be at http://example.org/ (no path suffix, implied port 80). The content in /var/www/port81 would be at http://example.org:81/ – Craig Miskell Jun 30 '21 at 21:25
-
@MattFletcher you can have multiple listen directives in a server declaration, so listen 80; listen 81; – Brunis Sep 21 '21 at 08:16