前言
本人小白,学校的校园网访问不了github等网站,所以打算使用nginx在云服务器上做正向代理这些网站。
服务器环境:Ubuntu 22.04.4 LTS
下载nginx
nginx默认只支持转发http,要增加模块ngx_http_proxy_connect_module
去支持https,所以建议使用源码进行编译安装(增加模块要重新编译)
这是一个开源模块,地址:https://github.com/chobits/ngx_http_proxy_connect_module
模块目前支持的nginx版本:
nginx的下载地址:http://nginx.org/download/
以1.19.9为例
mkdir /usr/nginx cd /usr/nginx wget http://nginx.org/download/nginx-1.19.9.tar.gz tar -xzvf nginx-1.19.9.tar.gz
这里是可以不进行编译安装的,因为增加模块还要编译安装一次
下载模块
去https://github.com/chobits/ngx_http_proxy_connect_module下载源码的zip压缩包
解压并重命名模块
将下载好的ngx_http_proxy_connect_module-master.zip
传到服务器的/usr/nginx
下,我使用的是xftp
cd /usr/nginx unzip ngx_http_proxy_connect_module-master.zip mv ngx_http_proxy_connect_module-master ngx_http_proxy_connect_module
安装模块
进入/usr/nginx/nginx-1.19.9
准备给nginx添加模块
cd /usr/nginx/nginx-1.19.9 patch -p1 < /usr/nginx/ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_1018.patch
注意这里的补丁和nginx的版本有对应关系,参考:
1.19.9对应的补丁是proxy_connect_rewrite_1018.patch
./configure --add-module=/usr/nginx/ngx_http_proxy_connect_module --prefix=/etc/nginx make && make install
修改nginx的配置文件
文件位置/etc/nginx/conf/nginx.conf
,建议备份一份:
cd /etc/nginx cp conf/nginx.conf conf/nginx.conf.bak vim /etc/nginx/conf/nginx.conf
给出我的配置文件:
#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; events { worker_connections 1024; } http { include mime.types; 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; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; #正向代理转发http请求 server { #指定DNS服务器IP地址 resolver 223.5.5.5; #监听80端口,http默认端口80 listen 80; #服务器IP或域名 server_name localhost; #正向代理转发http请求 location / { proxy_pass http://$host$request_uri; proxy_set_header HOST $host; proxy_buffers 256 4k; proxy_max_temp_file_size 0k; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_next_upstream error timeout invalid_header http_502; } } #正向代理转发https请求 server { #指定DNS服务器IP地址 resolver 223.5.5.5; #监听443端口,https默认端口443 listen 443; #正向代理转发https请求 proxy_connect; proxy_connect_allow 443 563; proxy_connect_connect_timeout 30s; proxy_connect_read_timeout 60s; proxy_connect_send_timeout 60s; location / { proxy_pass http://$host; proxy_set_header Host $host; } } # 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; # } #} }
设置或者关闭防火墙,我直接关闭了
sudo ufw disable
启动nginx
#指定配置文件启动 nginx -c /etc/nginx/conf/nginx.conf #检查nginx配置文件 nginx -t #修改配置后重新加载生效 nginx -s reload #关闭nginx nginx -s stop
log位置:/etc/nginx/logs
记得在服务器安全组中将对应的端口打开
本地windows使用代理
打开控制面板,找到网络和internet,找到internet选项
点击连接,局域网设置
填写对应的ip和端口
这样就所有的访问都会通过代理服务器进行转发了
但是配置完之后打开github很慢而且图片和JS,CSS等都加载不出来。我也不清楚什么原因所以我放弃了这个想法。
参考:
nginx–图解及代码实现正向代理、反向代理及负载均衡(非常实用,建议收藏)