使用mono和mono-fastcgi-server4结合NGINX在Linux上运行ASP.NET应用程序

时间:2018-10-24 15:18:50

标签: linux docker nginx mono fastcgi

我正在尝试在Linux Docker容器中运行ASP.NET应用程序。为此,我使用了单声道映像(mono:5.12)并在其上安装了mono-fastci-server4。另一个容器运行NGINX代理,将子目录映射到容器。这对于我用于Jenkins和Git容器的proxy_pass效果很好,但不适用于fastcgi_pass,至少不适用于多个子目录。

更确切地说: 只要我在一个子目录后面运行分配容器,一切工作就很好,但是当我将其放在两个子目录后面时,一切都会中断。我感到非常迷茫,不胜感激!

首先是我的工作配置:

NGINX.config(在我的Docker容器中生成)

IgniteCompute

mono-fastcgi-server4的启动脚本

// Start a client node. Pass an appropriate configuration to connect to the cluster.
Ignition.setClientMode(true);
Ignite clusterKiller = Ignition.start();

// Stop all remote nodes.
clusterKiller.compute(clusterKiller.cluster().forRemotes()).broadcast(() -> {
    // Use a new thread to avoid deadlock.
    new Thread(() -> {
        Ignition.stop(false);
    }).start();
});

// Stop the client node.
clusterKiller.close();

现在坏了:

NGINX.config(在我的Docker容器中生成)

upstream assignment {
    server 10.0.0.8:9000;
}
upstream course-git {
    server 10.0.0.4:8080;
}
upstream course-jenkins {
    server 10.0.0.10:8080;
}

# If we receive X-Forwarded-Proto, pass it through; otherwise, pass along the
# scheme used to connect to this server
map $http_x_forwarded_proto $proxy_x_forwarded_proto {
  default $http_x_forwarded_proto;
  ''      $scheme;
}
# If we receive X-Forwarded-Port, pass it through; otherwise, pass along the
# server port the client connected to
map $http_x_forwarded_port $proxy_x_forwarded_port {
  default $http_x_forwarded_port;
  ''      $server_port;
}
# If we receive Upgrade, set Connection to "upgrade"; otherwise, delete any
# Connection header that may have been passed to this server
map $http_upgrade $proxy_connection {
  default upgrade;
  '' close;
}
# Apply fix for very long server names
server_names_hash_bucket_size 128;
# Default dhparam
ssl_dhparam /etc/nginx/dhparam/dhparam.pem;
# Set appropriate X-Forwarded-Ssl header
map $scheme $proxy_x_forwarded_ssl {
  default off;
  https on;
}
gzip_types text/plain text/css application/javascript application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
log_format vhost '$host $remote_addr - $remote_user [$time_local] '
                 '"$request" $status $body_bytes_sent '
                 '"$http_referer" "$http_user_agent"';
access_log off;

resolver 127.0.0.11;

server {
    server_name _;
    listen 80;
    access_log /var/log/nginx/access.log vhost;

    location /assignment {
        root /;
        fastcgi_param  QUERY_STRING       $query_string;
        fastcgi_param  REQUEST_METHOD     $request_method;
        fastcgi_param  CONTENT_TYPE       $content_type;
        fastcgi_param  CONTENT_LENGTH     $content_length;
        fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
        fastcgi_param  REQUEST_URI        $request_uri;
        fastcgi_param  DOCUMENT_URI       $document_uri;
        fastcgi_param  DOCUMENT_ROOT      $document_root;
        fastcgi_param  SERVER_PROTOCOL    $server_protocol;
        fastcgi_param  HTTPS              $https if_not_empty;
        fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
        fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
        fastcgi_param  REMOTE_ADDR        $remote_addr;
        fastcgi_param  REMOTE_PORT        $remote_port;
        fastcgi_param  SERVER_ADDR        $server_addr;
        fastcgi_param  SERVER_PORT        $server_port;
        fastcgi_param  SERVER_NAME        $server_name;
        fastcgi_param  PATH_INFO          "";
        fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
        fastcgi_pass assignment;
    }
    location /course/git {
        proxy_pass http://course-git/course/git;
        # HTTP 1.1 support
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $proxy_connection;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
        proxy_set_header X-Forwarded-Ssl $proxy_x_forwarded_ssl;
        proxy_set_header X-Forwarded-Port $proxy_x_forwarded_port;
        # Mitigate httpoxy attack (see README for details)
        proxy_set_header Proxy "";
    }
    location /course/jenkins {
        proxy_pass http://course-jenkins/course/jenkins;
        # HTTP 1.1 support
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $proxy_connection;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
        proxy_set_header X-Forwarded-Ssl $proxy_x_forwarded_ssl;
        proxy_set_header X-Forwarded-Port $proxy_x_forwarded_port;
        # Mitigate httpoxy attack (see README for details)
        proxy_set_header Proxy "";
    }
}

mono-fastcgi-server4的启动脚本

echo "#!/bin/sh\nexport MONO_OPTIONS="--debug"\nfastcgi-mono-server4 /applications=/assignment:/course/assignment /socket=tcp:\$(ip -4 addr show \$BIND_TO| grep -Po 'inet \K[\d.]+'):9000 /verbose=True /printlog=True" > /opt/mono-fastcgi

尝试通过NGINX代理访问分配容器时出现以下错误:

upstream course-assignment {
    server 10.0.0.14:9000;
}

upstream course-git {
    server 10.0.0.10:8080;
}
upstream course-jenkins {
    server 10.0.0.4:8080;
}

# If we receive X-Forwarded-Proto, pass it through; otherwise, pass along the
# scheme used to connect to this server
map $http_x_forwarded_proto $proxy_x_forwarded_proto {
  default $http_x_forwarded_proto;
  ''      $scheme;
}
# If we receive X-Forwarded-Port, pass it through; otherwise, pass along the
# server port the client connected to
map $http_x_forwarded_port $proxy_x_forwarded_port {
  default $http_x_forwarded_port;
  ''      $server_port;
}
# If we receive Upgrade, set Connection to "upgrade"; otherwise, delete any
# Connection header that may have been passed to this server
map $http_upgrade $proxy_connection {
  default upgrade;
  '' close;
}
# Apply fix for very long server names
server_names_hash_bucket_size 128;
# Default dhparam
ssl_dhparam /etc/nginx/dhparam/dhparam.pem;
# Set appropriate X-Forwarded-Ssl header
map $scheme $proxy_x_forwarded_ssl {
  default off;
  https on;
}
gzip_types text/plain text/css application/javascript application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
log_format vhost '$host $remote_addr - $remote_user [$time_local] '
                 '"$request" $status $body_bytes_sent '
                 '"$http_referer" "$http_user_agent"';
access_log off;

resolver 127.0.0.11;

server {
    server_name _;
    listen 80;
    access_log /var/log/nginx/access.log vhost;

    location /course/assignment {
        root /;
        fastcgi_param  QUERY_STRING       $query_string;
        fastcgi_param  REQUEST_METHOD     $request_method;
        fastcgi_param  CONTENT_TYPE       $content_type;
        fastcgi_param  CONTENT_LENGTH     $content_length;
        fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
        fastcgi_param  REQUEST_URI        $request_uri;
        fastcgi_param  DOCUMENT_URI       $document_uri;
        fastcgi_param  DOCUMENT_ROOT      $document_root;
        fastcgi_param  SERVER_PROTOCOL    $server_protocol;
        fastcgi_param  HTTPS              $https if_not_empty;
        fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
        fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
        fastcgi_param  REMOTE_ADDR        $remote_addr;
        fastcgi_param  REMOTE_PORT        $remote_port;
        fastcgi_param  SERVER_ADDR        $server_addr;
        fastcgi_param  SERVER_PORT        $server_port;
        fastcgi_param  SERVER_NAME        $server_name;
        fastcgi_param  PATH_INFO          "";
        fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
        fastcgi_pass course-assignment;
    }
    location /course/git {
        proxy_pass http://course-git/course/git;
        # HTTP 1.1 support
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $proxy_connection;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
        proxy_set_header X-Forwarded-Ssl $proxy_x_forwarded_ssl;
        proxy_set_header X-Forwarded-Port $proxy_x_forwarded_port;
        # Mitigate httpoxy attack (see README for details)
        proxy_set_header Proxy "";
    }
    location /course/jenkins {
        proxy_pass http://course-jenkins/course/jenkins;
        # HTTP 1.1 support
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $proxy_connection;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
        proxy_set_header X-Forwarded-Ssl $proxy_x_forwarded_ssl;
        proxy_set_header X-Forwarded-Port $proxy_x_forwarded_port;
        # Mitigate httpoxy attack (see README for details)
        proxy_set_header Proxy "";
    }
}

是否甚至可以在多个子目录后面运行mono-fastcgi-server4?我没有找到使用多个子目录的任何示例。如果没有其他建议,我该如何解决这个问题?

非常感谢!

0 个答案:

没有答案