🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 反向代理 > 开发时,很多第三方规定只能使用80端口(比如微信开发),而frp代理80端口时会和nginx冲突,这就尴尬了,所以我们要想个办法来解决此问题:**使用Nginx反向代理配置来 隐藏 8080 端口。** * * * * * #### 解决frp和nginx80端口冲突问题: [如果服务器上80端口被占用的话 只能选择别的端口吗? · Issue #124 · fatedier/frp](https://github.com/fatedier/frp/issues/124) ~~~ nginx反向代理是不是要做到IIS和frp前面?即由nginx来监听80端口,根据域名的不同,分到IIS或者frep。这样公网服务器既可以自己做网站服务,又可以提供穿透内网发布Web? 这样原来的IIS主机头就不用了,而是由ngnix来实现? 嗯嗯,非常对 ~~~ [访问内网web不通过域名 · Issue #75 · fatedier/frp](https://github.com/fatedier/frp/issues/75) [怎么使用域名80端口访问? · Issue #883 · fatedier/frp](https://github.com/fatedier/frp/issues/883) * * * * * ### 解决方案: 1. 增加代理文件:/usr/local/nginx/conf/reverse-proxy/x.xxx.cn.conf; ``` server { listen 80; server_name x.xxx.cn; #标记代理 add_header This-Is-Proxy-Pass "$host => http://nginxServer (frp)"; location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://nginxServer; } } ``` 2. 修改文件:/usr/local/nginx/conf/nginx.conf(如果不用upstream 则这步可省略) ``` http { …… ######################## upstream ############################ upstream nginxServer { server 114.116.67.137:8080; } …… } ``` >[tip] 代理文件不能放在这里!只能放在需要代理的 vhost.conf 中。 3. 在需要代理的 vhost.conf 中引入代理配置文件 如果不想使用代理了,直接注释掉 `include /usr/local/nginx/conf/reverse-proxy/x.xxx.cn.conf;` 这行即可关闭代理。 >[tip] **注意这个反向代理实在服务器上配置的,是为了解决frp 80端口冲突不能用导致开发时不方便,使用代理以解决此问题,我们将80代理到8080就可以达到效果了(对外开放80,但其实被代理到了8080,然后穿透到本地开发机),本地不需要这样配置哦。** >[tip] 配置好代理后如不生效可能需要 `service nginx restart` 一下,重启而不是 `reload` * * * * * ### 扩展 [Frp 隐藏 8080 端口 – 码农的世界](https://free-e.net/165) [Linux运维学习笔记之三十:Nginx反向代理 - CSDN博客](https://blog.csdn.net/rumengjian/article/details/80451711) >[tip] upstream模块应放于nginx.conf配置的http{}标签内。 [搭建nginx反向代理用做内网域名转发 – 运维生存时间](http://www.ttlsa.com/nginx/use-nginx-proxy/) ~~~ client_max_body_size 50m; #缓冲区代理缓冲用户端请求的最大字节数,可以理解为保存到本地再传给用户 client_body_buffer_size 256k; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; proxy_connect_timeout 300s; #nginx跟后端服务器连接超时时间(代理连接超时) proxy_read_timeout 300s; #连接成功后,后端服务器响应时间(代理接收超时) proxy_send_timeout 300s; proxy_buffer_size 64k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置 proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传递请求,而不缓冲到磁盘 proxy_ignore_client_abort on; #不允许代理端主动关闭连接 ~~~ [Nginx反向代理以及负载均衡配置 - 程序媛_Mickey - 博客园](https://www.cnblogs.com/Miss-mickey/p/6734831.html) [使用Nginx实现反向代理 - CSDN博客](https://blog.csdn.net/qw_xingzhe/article/details/79580800) [还是少不了虚拟机 · php笔记 · 看云](https://www.kancloud.cn/xiak/php-node/558397) * * * * * ### https时的代理 将80的https代理到8080中去。 /usr/local/nginx/conf/reverse-proxy/x.xxx.cn.conf; ``` server { listen 80; listen 443 ssl http2; ssl_certificate /usr/local/nginx/conf/ssl/x.xxx.cn.crt; ssl_certificate_key /usr/local/nginx/conf/ssl/x.xxx.cn.key; server_name x.xxx.cn; #标记代理 add_header This-Is-Proxy-Pass "$host => https://x.xxx.cn:8080 (frp)"; location / { proxy_redirect off; proxy_set_header Host $host; proxy_ssl_server_name on; 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 $scheme; #看来这里要写死域名才行啊 proxy_pass https://x.xxx.cn:8080; } } ``` 配置正常,可总是报错:`[W] [vhost.go:136] get hostname from http/https request error: Unknow error`,80端口的https请求代理不过来啊。 > 虽然还没有找到真正的问题,但目前这也算是临时解决了这个问题。 > 猜想是因为https是加密的,直接转发到ip:pro是不能识别的,所以报无法找到host,只能完整的写要转发的域名和端口才可以。 [NGINX HTTPS and FRPS · Issue #610 · fatedier/frp](https://github.com/fatedier/frp/issues/610) [nginx https转发frps · Issue #671 · fatedier/frp](https://github.com/fatedier/frp/issues/671) [nginx的反向代理模块 参数proxy_pass,proxy_method,proxy_hide_ - adbug的个人空间 - 开源中国](https://my.oschina.net/u/1038053/blog/619993) [nginx之proxy_pass代理后端https请求完全拆解 - 永福的博客 - 开源中国](https://my.oschina.net/foreverich/blog/1517128?utm_medium=referral) [请教一个 nginx 反向代理 https 的问题? - V2EX](https://www.v2ex.com/t/253715) [有人配置成功过 nginx 反代 frp 的 https 嘛? - V2EX](https://www.v2ex.com/t/378393) [nginx模块之ngx_http_proxy_module - CSDN博客](https://blog.csdn.net/yum_root/article/details/77509156) [Nginx反向代理http和https - CSDN博客](https://blog.csdn.net/qq_32642039/article/details/78696119) 看来对于https的反向代理可不像http反向代理那么简单啊! * * * * * ### 补充 注意到默认有这个代理配置文件:/usr/local/nginx/conf/proxy.conf ``` proxy_connect_timeout 300s; proxy_send_timeout 900; proxy_read_timeout 900; proxy_buffer_size 32k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_redirect off; proxy_hide_header Vary; proxy_set_header Accept-Encoding ''; proxy_set_header Referer $http_referer; proxy_set_header Cookie $http_cookie; proxy_set_header Host $host; 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 $scheme; ``` * * * * * last update:2018-8-8 21:40:30