我正在运行安装了Nginx的Debian服务器以及OpenResty。 我有一个域名,该域名的一个子域名,未来将有多个域名指向其IP地址与Alogging。
我希望每个域或子域的OpenResty服务器运行在不同的端口上,Nginx服务器根据域名在服务器之间路由请求。
所以,现在我有:
domain1.com和sub.domain1.com domain1.com服务于端口8000, sub.domain1服务于端口8001 我想要:
sub.domain1.com或domain1.com 。 没有domain1.com:8000或sub.domain1.com:8001 domain2.com指向的IP,以及运行在8002端口的服务器,它也出现在用户为domain2.com而不是domain2.com:8002 ,依此类推 我曾尝试使用proxy_pass , proxy_set_header , proxy_redirect ,以各种configuration使用Googlesearchbuild议。 我设法一次有一个proxy_pass工作,但是显示端口给用户。 我试图以这种方式设置的全部原因是,它似乎并没有在多个端口上运行给用户。
另外,我正在使用SSL,并希望HTTP请求redirect到HTTPS。 我意识到,而试图找出这一点,我需要更改代理服务器端口443的SSL请求(要在默认端口上运行)。
这是我得到它与子域的工作:
Nginx的configuration( /etc/nginx/nginx.conf )是默认的,但有以下例外:
删除了虚拟主机包含指令:
#include /etc/nginx/conf.d/*.conf; #include /etc/nginx/sites-enabled/*;
在http { }块中添加domain1.com的证书:
ssl_certificate /path/to/public.pem; ssl_certificate_key /path/to/private.pem;
为我的代理定义了以下内容:
server { listen 443 ssl; ssl on; server_name dev.domain1.com; location / { proxy_pass https://sub.domain1.com:8001; } } server { listen 80; server_name sub.domain1.com; return 301 https://$host$request_uri; }
这工作得很好,但后来我尝试了相同的server { }块为本身,工作得很好, 这就打破了。
我到底在做什么?
补充笔记:
被代理的服务器基本上是:
http { ssl_certificate /path/to/public.pem; ssl_certificate_ley /path/to/private.pem; include mime.types; server { listen port ssl; ssl on; error_page 497 https://$host:$server_port$request_uri; location / { #whatever } } }
你需要做的第一件事就是定义你希望nginx监听的请求,你使用server_name来做什么,并且定义你想要使用listen来监听哪个端口。
从你所说的话听起来,你只是想让人们进入到他们的浏览器,然后将内容服务。 如果是这样的话,那么Nginx会监听端口80上的请求,并将其传递给端口8000/8001 / 800x上的OpenResty。
然而,这些都是非常基本的configuration,可以做到这一点,但你可能需要更多的设置。 查看这里和这里的文档以获取完整的列表,包括进一步的ssl设置
server { listen 80; server_name domain1.com; location / { proxy_pass http://127.0.0.1:8000; } } server { listen 80; server_name domain2.com; location / { proxy_pass http://127.0.0.1:8001; } }
就我个人而言,我更喜欢使用/etc/nginx/sites-enabled/文件夹来pipe理/组织网站,但是“可以”把它放在http块的nginx.con 。
否则,您将添加删除的行,将这些configuration分成两个文件,然后将这些文件放在/etc/nginx/sites-available和符号链接到/etc/nginx/sites-enabled folder 。
我相信您需要为每个虚拟主机服务器块或域名设置listen指令。
http://nginx.org/en/docs/http/ngx_http_core_module.html#listen
server { listen domain1.com:8000; ... } server { listen domain2.com:8001; ... }
如果使用防火墙,也可能需要打开这些端口。
如果你有一个默认的Nginx设置,那么你可能需要注释掉任何可能在conf文件中加载的listen指令并重新启动nginx。