aykkk 2024-11-05 18:32 采纳率: 100%
浏览 6
已结题

nginx+fascgi-mono-server托管多个网站监听端口问题

两个网站的server配置如下

server {
    listen 81;
    server_name localhost;
 
    location / {
        root   /data/www/w1;
        index  index.aspx;
         fastcgi_index index.aspx; 
         fastcgi_pass 127.0.0.1:9000; 
         include /etc/nginx/fastcgi_params; 
    }
}

server {
    listen 81;
    server_name localhost;
 
    location / {
        root   /data/www/w2;
        index  index.aspx;
         fastcgi_index index.aspx; 
         fastcgi_pass 127.0.0.1:9001; 
         include /etc/nginx/fastcgi_params; 
    }
}

启动fastcgi的命令如下:

sudo fastcgi-mono-server4 /applications=/:/data/www/w1/ /socket=tcp:127.0.0.1:9000

sudo fastcgi-mono-server4 /applications=/:/data/www/w2/ /socket=tcp:127.0.0.1:9001

两网站都能正常打开。我想如果两个server中  fastcgi_pass 都写成127.0.0.1:9000,相应启动命令的socket端口也都写成9000,会有什么影响?我自己测试的结果是:两server都写成9000后,只执行第一条w1的命令后,两个网站都能打开,没有执行w2那条命令。

nginx+fastcgi-mono-server我不熟,不知道这样做会有什么影响。tcp的监听端口要不要一致?

  • 写回答

1条回答 默认 最新

  • 香格里辣 2024-11-05 18:33
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    在nginx与fastcgi-mono-server的组合中,每个网站通常会通过不同的端口与nginx通信,这是因为你为每个网站实例指定了不同的端口号。但在你描述的案例中,尽管两个不同的服务器块使用了不同的fastcgi_pass端口,但是假如只启动了w1的相关实例并同时尝试访问两个网站,实际情况下你可能不会遇到问题,因为尽管它们监听相同的端口,但它们都是为同一个进程服务。然而,这并不是一个推荐的做法,因为它可能导致混淆和不可预测的行为。

    关于你的问题,如果两个网站的配置都使用相同的端口号(例如都使用端口9000),并且只启动了一个fastcgi实例监听这个端口(在这个案例中为w1),那么第二个网站(原来被设计为监听9001端口的那个)将无法正常工作,因为它无法通过nginx连接到预期的fastcgi实例。在这种情况下,访问第二个网站可能会收到错误消息或根本不会有响应。即使客户端(例如浏览器)可以从服务器收到一些响应(可能是因为两者的代码和静态文件都位于同一目录),但实际的ASP.NET应用逻辑将无法正常工作。这是因为每个应用实例通常需要在其自己的进程中运行,并监听不同的端口。这样设计主要是为了确保每个应用有其独立的资源空间和通信路径。如果所有的应用都使用相同的端口,可能会遇到端口冲突和数据混淆等问题。所以在部署这种配置时通常会为每个网站实例配置不同的端口号以确保正确性。总结来说,为了清晰和安全起见,最好为每个网站配置不同的端口号来避免可能的冲突或问题。这不仅仅是Nginx处理问题的方法,也包括应用程序服务器的行为规则等等原因使得每一个应用在独特的TCP连接上进行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月20日
  • 已采纳回答 11月12日
  • 创建了问题 11月5日