客户端、WSL宿主机访问WSL服务

WSL宿主机可直接访问WSL服务,但是客户端访问WSL服务需要进行相应的配置。

静态网页服务,可通过设置端口转发规则,实现客户端访问WSL服务。

动态网页服务,最好通过代理服务器,实现客户端访问WSL服务。

前提条件:

1、windows10系统安装好WSL,并设置好用户信息

2、准备并启动WSL服务

(1)在WSL的某个文件夹下,创建index.html文件,文件内容如下:

<html>
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
        <h1>点个赞再走</h1>
        <p>这么好的文章还不点赞</p>
        <h2>一键三连关注一下</h2>
        <p>不点赞不许白嫖</p>
    </body>
</html>

 (2)在WSL中输入以下命令,查看WSL的IP

ip addr | grep eth0

(3)在WSL中输入以下命令,来启动index.html服务(如果python不行,可以试试python3)

python -m http.server 8080

WSL宿主机访问WSL服务

在WSL宿主机的浏览器输入172.19.83.223:8080(WSL的IP:WSL服务的端口),看到下图所示内容,即实现了宿主机访问WSL的服务

此时WSL中的反馈如下图:

客户端访问WSL服务

方法1、设置端口转发规则

1、添加防火墙的入站规则(防火墙关闭的情况下可忽略)

【Windows设置】-【更新和安全】-【Windows安全中心】

【打开Windows安全中心】-【防火墙和网络保护】

【高级设置】-【入站规则】

点击右边的【新建规则】,选择【端口】,然后点击【下一页】

规则选择【TCP】,端口选择【特定本地端口】,并输入对外的空闲端口(这里输入80端口),然后点击【下一页】

允许连接,继续点击【下一页】

规则全选,可自行选择,继续点击【下一页】

输入名称、描述后,点击【完成】。然后可以在入站规则中找到新建的规则

2、在WSL宿主机(服务器端)设置端口转发规则(端口不能被占用)

(1)用管理员身份在命令提示符中输入添加端口转换规则的命令:

添加端口转换规则:

netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=8080 connectaddress=172.19.83.223

删除端口转换规则:

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=0.0.0.0

查看端口转换规则:

netsh interface portproxy show all

备注:

listenport:监控的Windows端口  

connectport:WSL服务的端口 

connectaddress:WSL的IP

(2)输入查看端口转发规则的命令,查看端口转发规则是否设置成功

3、在客户端输入172.21.59.55:80(服务器的IP:服务器的端口),看到下图所示内容,即实现了客户端访问服务器WSL的服务

备注:在服务器端设置了端口转发规则后,服务器的浏览器访问,也可输入172.21.59.55:80(服务器的IP:服务器的端口)访问WSL的服务,如下图

方法2、配置nginx代理服务器

Nginx相关地址:

源码:https://trac.nginx.org/nginx/browser

官网:http://www.nginx.org/

Nginx的基本命令:

nginx -t                   检查配置文件是否有语法错误

nginx -s reload       热加载,重新加载配置文件

nginx -s stop          快速关闭

nginx -s quit           等待工作进程处理完成后关闭

配置nginx代理服务器:

1、通过官网进去,点击右侧的【download】,进入下载页,选择版本进行下载

2、将下载好的nginx压缩包,解压到某个目录下

3、按路径找到nginx.conf文件:解压文件夹/nginx-1.27.2/conf/nginx.conf

4、配置nginx.conf文件(nginx配置详情见后面)

主要配置server块的server全局块和location块内容

## 配置反向代理的参数
server {
    listen    80; # 监听服务器端口
    server_name xx_domain
 
    # 对 "/ierp/" 启用反向代理
    location ^~ /ierp/{
            proxy_buffering off; 
            proxy_pass http://172.19.83.223:8080/ierp/; # 路由转发URL 
            proxy_set_header Host            $host:8080; # 传递域名
            proxy_set_header X-Real-IP       $remote_addr; # 传递ip
            proxy_set_header X-Scheme        $scheme;      # 传递协议
            # 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
            client_max_body_size 5M; # 允许客户端请求的最大单文件字节数
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
}

5、管理员身份启动nginx.exe

6、启动WSL服务

7、客户端浏览器输入172.21.59.55:80,即可访问WSL服务

nginx配置详解

nginx配置文件组成
全局块

主要设置影响nginx服务器整体运行的配置指令。

通常包括:

①配置运行Nginx服务器的用户(组)

②允许生成的worker process数

③Nginx进程PID存放路径

④日志的存放路径和类型

⑤配置文件引入等

events块

涉及的指令主要影响Nginx服务器与用户的网络连接。

常用到的设置:

①是否开启对多worker process下的网络连接进行序列化

②是否允许同时接收多个网络连接

③选取哪种事件驱动模型处理连接请求

④每个worker process可以同时支持的最大连接数等

这一部分的指令对Nginx服务器的性能影响较大,在实际配置中应该根据实际情况灵活调整。

http块http全局块

配置的指令包括:

文件引入、MIME-Type定义、日志自定义、是否使用sendfile传输文件、连接超时时间、单连接请求数上限等。

多个sever块server全局块

最常见的两个配置项是

本虚拟主机的监听配置和本虚拟主机的名称或IP配置

多个location块

nginx.conf文件内容:

# 全局块
#user  nobody; # 将user指令注释掉,或配置成nobody,代表所有用户都可以运行
worker_processes  1; # 工作进程的数量

#error_log  logs/error.log; # 指定错误日志的路径
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid; # 指定pid文件的路径


# events块
events {
    worker_connections  1024; # 每个工作进程的最大连接数
}

# http块
http {
    # http全局块
    include       mime.types; # include指令,用于包含其他的配置文件
    default_type  application/octet-stream;# 配置默认类型

    # 日志格式
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main; # 日志输出目录

    sendfile        on; # 开启sendfile方式传输文件
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65; # 链接超时时间,自动断开

    #gzip  on;

# server块 —— 虚拟主机
server {
        # server全局块
        listen       80; # 监听来自所有IP,请求80端口的请求
        server_name  localhost; # 浏览器访问域名

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        # location块 —— 路由
        location / {
            root   html; # 访问根目录
            index  index.html index.htm; # 入口文件
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        # location块 —— 路由
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ { # 
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

全局块

# 指定可以运行nginx服务的用户和用户组,只能在全局块配置
# user [user] [group]
# 将user指令注释掉,或者配置成nobody的话所有用户都可以运行
# user nobody nobody;
# user指令在Windows上不生效,如果你制定具体用户和用户组会报小面警告
# nginx: [warn] "user" is not supported, ignored in D:\software\nginx-1.18.0/conf/nginx.conf:2

# 指定工作线程数,可以制定具体的进程数,也可使用自动模式,这个指令只能在全局块配置
# worker_processes number | auto;
# 列子:指定4个工作线程,这种情况下会生成一个master进程和4个worker进程
# worker_processes 4;

# 指定pid文件存放的路径,这个指令只能在全局块配置
# pid logs/nginx.pid;

# 指定错误日志的路径和日志级别,此指令可以在全局块、http块、server块以及location块中配置。
# 其中debug级别的日志需要编译时使用--with-debug开启debug开关
# error_log [path] [debug | info | notice | warn | error | crit | alert | emerg] 
# error_log  logs/error.log  notice;
# error_log  logs/error.log  info;

events块

# 当某一时刻只有一个网络连接到来时,多个睡眠进程会被同时叫醒,但只有一个进程可获得连接。如果每次唤醒的进程数目太多,会影响一部分系统性能。在Nginx服务器的多进程下,就有可能出现这样的问题。
# 开启的时候,将会对多个Nginx进程接收连接进行序列化,防止多个进程对连接的争抢
# 默认是开启状态,只能在events块中进行配置
# accept_mutex on | off;

# 如果multi_accept被禁止了,nginx一个工作进程只能同时接受一个新的连接。否则,一个工作进程可以同时接受所有的新连接。 
# 如果nginx使用kqueue连接方法,那么这条指令会被忽略,因为这个方法会报告在等待被接受的新连接的数量。
# 默认是off状态,只能在event块配置
# multi_accept on | off;

# 指定使用哪种网络IO模型,method可选择的内容有:select、poll、kqueue、epoll、rtsig、/dev/poll以及eventport,一般操作系统不是支持上面所有模型的。
# 只能在events块中进行配置
# use method
# use epoll

# 设置允许每一个worker process同时开启的最大连接数,当每个工作进程接受的连接数超过这个值时将不再接收连接
# 当所有的工作进程都接收满时,连接进入logback,logback满后连接被拒绝
# 只能在events块中进行配置
# 注意:这个值不能超过超过系统支持打开的最大文件数,也不能超过单个进程支持打开的最大文件数,具体可以参考这篇文章:https://cloud.tencent.com/developer/article/1114773
# worker_connections  1024;

http块

# 常用的浏览器中,可以显示的内容有HTML、XML、GIF及Flash等种类繁多的文本、媒体等资源,浏览器为区分这些资源,需要使用MIME Type。换言之,MIME Type是网络资源的媒体类型。Nginx服务器作为Web服务器,必须能够识别前端请求的资源类型。

# include指令,用于包含其他的配置文件,可以放在配置文件的任何地方,但是要注意你包含进来的配置文件一定符合配置规范,比如说你include进来的配置是worker_processes指令的配置,而你将这个指令包含到了http块中,着肯定是不行的,上面已经介绍过worker_processes指令只能在全局块中。
# 下面的指令将mime.types包含进来,mime.types和ngin.cfg同级目录,不同级的话需要指定具体路径
# include  mime.types;

# 配置默认类型,如果不加此指令,默认值为text/plain。
# 此指令还可以在http块、server块或者location块中进行配置。
# default_type  application/octet-stream;

# access_log配置,此指令可以在http块、server块或者location块中进行设置
# 在全局块中,我们介绍过errer_log指令,其用于配置Nginx进程运行时的日志存放和级别,此处所指的日志与常规的不同,它是指记录Nginx服务器提供服务过程应答前端请求的日志
# access_log path [format [buffer=size]]
# 如果你要关闭access_log,你可以使用下面的命令
# access_log off;

# log_format指令,用于定义日志格式,此指令只能在http块中进行配置
# log_format  main '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';
# 定义了上面的日志格式后,可以以下面的形式使用日志
# access_log  logs/access.log  main;

# 开启关闭sendfile方式传输文件,可以在http块、server块或者location块中进行配置
# sendfile  on | off;

# 设置sendfile最大数据量,此指令可以在http块、server块或location块中配置
# sendfile_max_chunk size;
# 其中,size值如果大于0,Nginx进程的每个worker process每次调用sendfile()传输的数据量最大不能超过这个值(这里是128k,所以每次不能超过128k);如果设置为0,则无限制。默认值为0。
# sendfile_max_chunk 128k;

# 配置连接超时时间,此指令可以在http块、server块或location块中配置。
# 与用户建立会话连接后,Nginx服务器可以保持这些连接打开一段时间
# timeout,服务器端对连接的保持时间。默认值为75s;header_timeout,可选项,在应答报文头部的Keep-Alive域设置超时时间:“Keep-Alive:timeout= header_timeout”。报文中的这个指令可以被Mozilla或者Konqueror识别。
# keepalive_timeout timeout [header_timeout]
# 下面配置的含义是,在服务器端保持连接的时间设置为120 s,发给用户端的应答报文头部中Keep-Alive域的超时时间设置为100 s。
# keepalive_timeout 120s 100s

# 配置单连接请求数上限,此指令可以在http块、server块或location块中配置。
# Nginx服务器端和用户端建立会话连接后,用户端通过此连接发送请求。指令keepalive_requests用于限制用户通过某一连接向Nginx服务器发送请求的次数。默认是100
# keepalive_requests number;

server块

每一个http块都可以包含多个server块,而每个server块就相当于一台虚拟主机,它内部可有多台主机联合提供服务,一起对外提供在逻辑上关系密切的一组服务(或网站)。

1、listen指令

listen指令的配置非常灵活,可以单独制定ip,单独指定端口或者同时指定ip和端口。

listen 127.0.0.1:8000;  #只监听来自127.0.0.1这个IP,请求8000端口的请求
listen 127.0.0.1; #只监听来自127.0.0.1这个IP,请求80端口的请求(不指定端口,默认80)
listen 8000; #监听来自所有IP,请求8000端口的请求
listen *:8000; #和上面效果一样
listen localhost:8000; #和第一种效果一致

2、server_name指令

用于配置虚拟主机的名称。每台虚拟主机可以有一个名称,也可以有多个名称,名称之间用空格隔开。每个名字就是一个域名,由两段或者三段组成,之间由点号“.”隔开。

server_name myserver.com www.myserver.com

此虚拟主机的名称设置为myserver.com或www. myserver.com。

3、location块

location块的主要作用是,基于Nginx服务器接收到的请求字符串(例如, server_name/uri-string),对除虚拟主机名称(也可以是IP别名)之外的字符串(“/uri-string”部分)进行匹配,对特定的请求进行处理。

location的语法结构为:

location [ = | ~ | ~* | ^~ ] uri { ... }

其中,uri变量是待匹配的请求字符串,可以是不含正则表达的字符串,如/myserver.php等;也可以是包含有正则表达的字符串,如 .php$(表示以.php结尾的URL)等。为方便后续叙述,此处约定,不含正则表达的uri称为“标准uri”,使用正则表达式的uri称为“正则uri”。

方括号里的部分,是可选项,用来改变请求字符串与 uri 的匹配方式。

在不添加方框内的内容时,Nginx服务器匹配location的搜索方法:

(1)用location块中的标准uri和请求字符串进行匹配,记录匹配度最高的location块。

(2)用location块中的正则uri和请求字符串匹配,当正则uri匹配成功,则结束搜索,并使用这个location块处理此请求;如果正则匹配全部失败,则使用记录的匹配度最高的标准uri的location块处理此请求。

了解了Nginx服务器匹配location的搜索方法后,就可以解释可选项中各个标识的含义了:

  • “=”,用于标准uri前,要求请求字符串与uri严格匹配。如果已经匹配成功,就停止继续向下搜索并立即处理此请求。

  • “^~”,用于标准uri前,要求Nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配。

  • “~”,用于表示uri包含正则表达式,并且区分大小写。

  • “~*”,用于表示uri包含正则表达式,并且不区分大小写。注意如果uri包含正则表达式,就必须要使用“~”或者“~*”标识

4、root指令

这个指令用于设置请求寻找资源的跟目录,此指令可以在http块、server块或者location块中配置。由于使用Nginx服务器多数情况下要配置多个location块对不同的请求分别做出处理,因此该指令通常在location块中进行设置。

root path

path变量中可以包含Nginx服务器预设的大多数变量,只有documentroot和documentroot和realpath_root不可以使用。

说明:本文摘抄于参考博客内容,对其中知识的应用和记录,详细知识参考原博客文章。

参考文献:

1、同一局域网下windows主机和wsl子系统相互网络服务访问_局域网访问wsl-CSDN博客

2、Nginx配置文件详解 - 程序员自由之路 - 博客园

3、nginx详细参数配置(史上最全) - hanease - 博客园

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤王帝皇5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值