欢迎各位兄弟 发布技术文章
这里的技术是共享的
用户在国外,访问不了 https://www.itsk.com ,,我在国内,,,我这边可以 nginx 代理给他访问吗
可以通过Nginx反向代理帮国外用户访问国内受限网站。以下是具体方案和注意事项:
▌方案实现步骤(详细版)
国内服务器准备
确保有公网IP(推荐云服务器如阿里云/腾讯云)
开放HTTPS端口(443)和自定义管理端口(建议修改默认SSH端口)
域名配置(可选但推荐)
购买域名并完成ICP备案
添加A记录解析到服务器IP
申请SSL证书(推荐Let's Encrypt免费证书)
Nginx配置示例(/etc/nginx/conf.d/itsk.conf):
nginxserver { listen 443 ssl; server_name proxy.yourdomain.com; # 你的代理域名 ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass https://www.itsk.com; proxy_set_header Host www.itsk.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 以下为性能优化参数 proxy_connect_timeout 60s; proxy_read_timeout 600s; proxy_send_timeout 600s; proxy_buffer_size 32k; proxy_buffers 8 32k; # 启用gzip压缩 gzip on; gzip_proxied any; gzip_types *; } # 安全限制配置 allow 用户国外IP; deny all; }
安全加固措施
配置UFW防火墙:
bashsudo ufw allow 443/tcp sudo ufw enable
安装fail2ban防爆破
设置Nginx基础认证:
bashsudo apt install apache2-utils sudo htpasswd -c /etc/nginx/.htpasswd username
在Nginx配置中添加:
nginxauth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/.htpasswd;
性能优化建议
启用HTTP/2:
nginxlisten 443 ssl http2;
RightWay加速设置:
nginxproxy_ssl_server_name on; proxy_ssl_session_reuse on;
▌注意事项
法律风险
需确认代理内容不违反《计算机信息网络国际联网安全保护管理办法》
避免涉及跨境数据传输监管敏感领域(如金融、医疗数据)
性能优化
跨国延迟问题解决方案:
启用Brotli压缩(需编译Nginx时加入模块)
设置海外CDN(如Cloudflare)
使用TCP BBR拥塞控制算法
监测维护
日志分析建议配置:
nginxlog_format proxy_log '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ' '$upstream_response_time $request_time'; access_log /var/log/nginx/proxy.log proxy_log;
设置Zabbix或Prometheus监控代理流量
备选方案
若代理不稳定可考虑:
自建WireGuard VPN
使用Cloudflare Tunnel(需备案域名)
海外服务器中转(新加坡等中立节点)
带宽成本计算
按平均页面大小2MB计算:
100次访问/天 ≈ 200MB ≈ 6GB/月
需关注云服务商出方向流量计费(通常0.5-1元/GB)
建议首次配置完成后进行:
压力测试(建议使用vegeta工具)
跨国延迟测试(从用户所在地ping测试)
合规性自查(保留访问日志6个月以上)
如需进一步优化跨国访问速度,可考虑加入QUIC协议支持或部署海外边缘节点。
端口 用 80,,不用 443 可以吗
可以使用80端口(HTTP)进行代理,但需要特别注意以下几点关键事项:
nginxserver { listen 80; server_name proxy.yourdomain.com; # 你的代理域名 location / { proxy_pass http://www.itsk.com; # 注意:目标网站也改为HTTP协议 proxy_set_header Host www.itsk.com; # 强制所有HTTP请求跳转到目标网站的HTTPS(避免混合内容问题) proxy_redirect http:// https://; } # 安全限制(IP白名单、基础认证等) allow 用户国外IP; deny all; }
协议降级风险
目标网站itsk.com若强制HTTPS(HSTS),通过HTTP代理可能导致内容加载失败(如图片/CSS/JS混用错误)。
解决方法:
nginxproxy_redirect http:// https://; # 代理层自动跳转HTTPS
明文传输警告
在代理层添加基础认证(auth_basic)。
用防火墙仅允许特定IP访问。
HTTP代理的所有流量(包括用户输入的表单、密码)均为明文传输,易被中间人窃听。
临时缓解方案:
目标网站兼容性
检查目标网站是否支持HTTP访问(部分现代网站已关闭80端口)。
测试命令:
bashcurl -I http://www.itsk.com # 观察返回状态码是否为200
国内监管要求
国内域名使用80端口需完成ICP备案,否则可能被运营商阻断。
非备案域名建议改用高位端口(如8080、8000)。
| 特性 | 80端口 (HTTP) | 443端口 (HTTPS) |
|---|---|---|
| 安全性 | 明文传输,高风险 | 加密传输,安全可靠 |
| 兼容性 | 可能因HSTS/Jump劫持失败 | 支持所有现代网站 |
| 备案要求 | 必须备案 | 必须备案 |
| 配置复杂度 | 简单 | 需SSL证书,稍复杂 |
| 适用场景 | 临时测试/内网使用 | 正式生产环境 |
临时测试
用80端口快速验证可行性,之后尽快切换至HTTPS。
长期使用
必须申请SSL证书(Let's Encrypt免费证书自动化):
bashsudo certbot --nginx -d proxy.yourdomain.com
无备案场景
改用非标准端口(如8080)+ WireGuard VPN组合(用户先连VPN再访问代理)。
若目标网站为HTTPS但代理用HTTP,Nginx会因协议转换增加开销,建议:
nginxproxy_http_version 1.1; # 启用HTTP/1.1长连接 proxy_buffering off; # 禁用缓冲降低延迟
配置完成后,立即验证:
bashcurl -v http://proxy.yourdomain.com # 检查请求是否被正确处理