前言
本教程根据 神代綺凜 的文章 Nginx 真·反代P站 恢复直接访问 加之我的个人理解改编。
本教程通过使用宝塔面板部署以达到简化步骤的目的,并补充了一些实践中发现细节。
正文
配置示例
在这里展示出我配置时的环境示例
仅供参考
域名:
- *.pxing.test.qixiv.tk
- *.test.qixiv.tk
服务器环境:
centos 7_64 bit
宝塔版本号6.8.9
友情提示
关于服务器:
关于域名:
事前准备
在一切开始之前,你需要准备好一个域名,以及一台装有宝塔面板的服务器。我们假设你已经知道怎么获取这些东西,如果你不知道,请自行百度。
解析你的域名
需要使用哪些域?
在反代时我们需要用到以下几个域
如果你愿意使用一个船新域名专门反代:
example.com
*.example.com
*.pximg.example.com
- example.com
随意,你可以放点自己的东西做一些伪装或者说明,或者直接 301 到www.example.com
- *.example.com
用于反代对齐*.pixiv.net - *.pximg.example.com
用于反代对齐*.pximg.net,其实该域名中的pximg也可以替换成其他的字符串,只要不与P站的二级域名服务产生冲突即可
如果你想用一个自己正在使用的域名反代并且不想影响该域名的其他服务:
pixiv.example.com
*.pixiv.example.com
*.pximg.example.com
各自作用同上,在后续配置上灵性修改即可
修改配置文件
在进行服务器上的操作之前,我们先要在本地进行一些处理。
有两段 nginx 的配置文件需要被预先修改一下。我们需要将其中的示例域名替换为自己的域名。
第一段是给 *.example.com 用的
server_name ~^([^.]+)\.example\.com$;
set $domain $1;
resolver 8.8.8.8;
location ~ .*
{
proxy_set_header Host $domain.pixiv.net;
proxy_cookie_domain pixiv.net example.com;
proxy_pass https://$domain.pixiv.net;
proxy_set_header Accept-Encoding "";
sub_filter "pixiv.net" "example.com";
sub_filter "pximg.net" "pximg.example.com";
sub_filter_once off;
sub_filter_types *;
}
第二段是给 *.pximg.example.com 用的
server_name ~^([^.]+)\.pximg\.example\.com$;
set $domain $1;
resolver 8.8.8.8;
location ~ .*
{
proxy_set_header Host $domain.pximg.net;
proxy_set_header Referer "https://www.pixiv.net";
proxy_pass https://$domain.pximg.net;
proxy_set_header Accept-Encoding "";
sub_filter "pixiv.net" "example.com";
sub_filter "pximg.net" "pximg.example.com";
sub_filter_once off;
sub_filter_types *;
}
新建站点
接下来,在宝塔面板里新建两个站点,同样依照以下格式替换你的域名。之所以不只添加泛解析域名,是因为...宝塔不让。
第一个站点:
example.com
*example.com
第一个站点的图片示例(仅供参考)
第二个站点:
pximg.example.com
*.pximg.example.com
第二个站点的图片示例(仅供参考)
新建完之后的效果(仅供参考)
申请泛域名ssl证书
依次用宝塔的 ssl 申请功能申请泛域名的 ssl 证书。
进入宝塔的 lets encrypt 免费 ssl 证书申请界面。
首先勾选 DNS 验证,勾选泛解析域名,选择手动解析,然后点击开始申请,根据弹窗,前往你的 DNS 供应商处添加一条 TXT 记录(注意:再次期间不要关闭网页),等待数分钟确保解析生效后,方可点击确认按钮完成证书申请。
两个站点的 SSL 设置完之后的效果(仅供参考)
修改nginx配置文件
最后,我们需要修改nginx的配置文件,将上面的两段配置文件分别配置入两个站点中。
第一步,替换原本配置文件中以 server_name
开头的那一行为你修改完毕后的配置文件中的以 server_name
开头的那一行。
第二步,将除了以 server_name
开头的那一行之外的剩下的文本插入原有配置文件的
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
这一行的上方,请注意,这个位置很重要,不要弄错了。
直接文字描述可能不是很好理解,所以在这里给出两个站点配置文件的示例,需要修改的部分已经黄色高亮标出。
因为是截图出自是我自己的配置文件,所以直接把代码抄过去是没用的,记得按照上面的教程进行修改哦!!!
修改完毕,保存。
访问 www.你的反代域名
注意:要加 “www.” 不然会502报错
注意2:在使用反代登录PIXIV账号时可能出现“需要网站所有者处理的错误:网站密钥的网域无效”的情况,在此给出原教程博主 神代綺凜 的解答
开始享受直连 p 站的喜悦吧。
快递单号、快递单号网站、淘宝单号提供申诉电子面单 手写底单www.dydanhw.com
server_name ~^([^.]+)\.pixiv.neko25\.top$;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/pixiv.neko25.top;
set $domain $1;
resolver 8.8.8.8;
location ~ .*
{
proxy_set_header Host $domain.pixiv.net;
proxy_cookie_domain pixiv.net pixiv.neko25.top;
proxy_pass https://$domain.pixiv.net;
proxy_set_header Accept-Encoding "";
sub_filter "pixiv.net" "pixiv.neko25.top";
sub_filter "pximg.net" "pximg.neko25.top";
sub_filter_once off;
sub_filter_types *;
}
呃呃呃
就还是502
查过后应该是没问题的..
我尝试了下原作设的那套配置。。成功了
应为菜我并没有搞懂是为什么ヾ(´・ ・`。)ノ"
88单号网 一单一用 免费试用 免费单号 快递单号www.88danhaowang.com
礼品购买网,全国区域一件代发礼品、价格实惠并真实物流可派送。http://www.lpgm.cn
大佬你好,我反代后点击登录跳回了源站是怎么回事呢
点击登录跳回源站一般来说是解析或者是 nginx sub_filter 的问题,不过我访问你的反代的时候并没有遇到跳回源站的情况ヾ(´・ ・`。)ノ"
代理设置的问题吧,或者是点到第三方登入了
server
{
listen 80;
listen 443 ssl http2;
# server_name pixiv.030701.xyz *.pixiv.030701.xyz;
server_name ~^([^.]+)\.pixiv.030701\.xyz$;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/pixiv.030701.xyz;
set $domain $1;
resolver 8.8.8.8;
location ~ .*
{
proxy_set_header Host $domain.pixiv.net;
proxy_cookie_domain pixiv.net pixiv.030701.xyz;
proxy_pass https://$domain.pixiv.net;
proxy_set_header Accept-Encoding "";
proxy_ssl_server_name on;
sub_filter "pixiv.net" "pixiv.030701.xyz";
sub_filter "pximg.net" "pximg.030701.xyz";
sub_filter_once off;
sub_filter_types *;
}
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
ssl_certificate /www/server/panel/vhost/cert/pixiv.030701.xyz/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/pixiv.030701.xyz/privkey.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;
#SSL-END
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
#error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END
#PHP-INFO-START PHP引用配置,可以注释或修改
include enable-php-74.conf;
#PHP-INFO-END
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/pixiv.030701.xyz.conf;
#REWRITE-END
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log off;
access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
expires 12h;
error_log off;
access_log /dev/null;
}
access_log /www/wwwlogs/pixiv.030701.xyz.log;
error_log /www/wwwlogs/pixiv.030701.xyz.error.log;
}
server
{
listen 80;
listen 443 ssl http2;
# server_name pximg.030701.xyz *.pximg.030701.xyz;
server_name ~^([^.]+)\.pximg\.030701\.xyz$;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/pximg.030701.xyz;
set $domain $1;
resolver 8.8.8.8;
location ~ .*
{
proxy_set_header Host $domain.pximg.net;
proxy_set_header Referer "https://www.pixiv.net";
proxy_pass https://$domain.pximg.net;
proxy_set_header Accept-Encoding "";
proxy_ssl_server_name on;
sub_filter "pixiv.net" "pixiv.030701.xyz";
sub_filter "pximg.net" "pximg.030701.xyz";
sub_filter_once off;
sub_filter_types *;
}
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
ssl_certificate /www/server/panel/vhost/cert/pximg.030701.xyz/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/pximg.030701.xyz/privkey.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;
#SSL-END
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
#error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END
#PHP-INFO-START PHP引用配置,可以注释或修改
include enable-php-74.conf;
#PHP-INFO-END
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/pximg.030701.xyz.conf;
#REWRITE-END
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log off;
access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
expires 12h;
error_log off;
access_log /dev/null;
}
access_log /www/wwwlogs/pximg.030701.xyz.log;
error_log /www/wwwlogs/pximg.030701.xyz.error.log;
}
大佬您好,我设置反代之后就算用 www.hostname.com 访问也是返回502是怎么回事啊
我解决了,方法是要在配置文件里加上 proxy_ssl_server_name on;
大佬您好,我反代成功了,但是登录的时候提示找不到IP地址是怎么回事
抱歉啦,我已经有一段时间没有折腾这个反代了,没有能力向您提供直接的帮助。或许您可以参考本文开头链接的 @神代綺凜 的文章来尝试解决登录问题。ヾ(´・ ・`。)ノ"
那个,根据作者提供的神代文章我自行解决了,谢过作者
我也遇到了这个问题
这个错误怎么回事
ERROR:
nginx: [emerg] "sub_filter" directive is duplicate in /www/server/panel/vhost/nginx/pixiv.nimassr.ml.conf:18
nginx: configuration file /www/server/nginx/conf/nginx.conf test failed
可能是你的 sub_filter 配置写重复了 |´・ω・)ノ
https://www.pixiv.loli.by/
这样呢。。。无论https和http好像都不行。。
感觉是 SSL 设置有问题欸 (´ο`*)
检查一下 SSL 设置看看?
浏览器报错:
此网站无法提供安全连接
www.pixiv.loli.by 使用了不受支持的协议。
ERR_SSL_VERSION_OR_CIPHER_MISMATCH
协议不受支持
客户端和服务器不支持一般 SSL 协议版本或加密套件。
cf不能泛解析-_-||
欸?我记得cf可以泛解析呀,虽然不能给泛解析套cdn......
好友已加 (*/ω\*) 刚才回复的时候忘记登陆了
咱的QQ:754782949
http://chart.loli.by/uploads/2019/09/6_6_R_ZGCP0WBL4_5_PP7EO.png
修改nginx配置文件那步能给个范例吗。。感觉不是特别清楚。。唔。。还有发布评论框应该放到上面
加了几张图片范例,希望可以帮到你ヾ(≧∇≦*)ゝ
https://img.vim-cn.com/20/84032df5a29bc2f05614ffae84fd2cf32b8d9d.png
这个是咋回事
很明显是页面没有加载全,但光凭这张图片我也没办法判断问题出在哪里ヾ(´・ ・`。)ノ"
如果您留的QQ是真实的,也许您愿意加个好友和我探讨一下?我也很担心我的教程是否出现了错误。
很抱歉今天才回复你,我刚才看了一下,我的宝塔面板里明明把两个反代都关闭了,但不知道为什么主站反代自己开了起来,全部打开后我确认我的反代可以正常访问(虽然很慢),根据你的图片里的网址我访问看了下,你的https好像有问题,准确的说,你的域名只要加了https我一个都打不开,但http是正常的,我现在用的是手机,明天我再用电脑看一下,如果https还是打不开,你可能需要调整你的ssl设置。
user www www;
worker_processes auto;
error_log /www/wwwlogs/nginx_error.log crit;
pid /www/server/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 51200;
multi_accept on;
}
http
{
include mime.types;
#include luawaf.conf;
include proxy.conf;
default_type application/octet-stream;
server_names_hash_bucket_size 512;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server_tokens off;
access_log off;
server
{
listen 80;
listen 443 ssl http2;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/stop;
server_name ~^([^.]+)\.pixiv\.waite\.xyz$;
set $domain $1;
resolver 8.8.8.8;
location ~ .*
{
proxy_set_header Host $domain.pixiv.net;
proxy_cookie_domain pixiv.net pixiv.waite.xyz;
proxy_pass https://$domain.pixiv.net;
proxy_set_header Accept-Encoding "";
sub_filter "pixiv.net" "pixiv.waite.xyz";
sub_filter "pximg.net" "pximg.waite.xyz";
sub_filter_once off;
sub_filter_types *;
}
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
ssl_certificate /www/server/panel/vhost/cert/pixiv.waite.xyz/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/pixiv.waite.xyz/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;
#SSL-END
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
error_page 404 /404.html;
error_page 502 /502.html;
#ERROR-PAGE-END
#PHP-INFO-START PHP引用配置,可以注释或修改
include enable-php-00.conf;
#PHP-INFO-END
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/pixiv.xyz.conf;
#REWRITE-END
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log off;
access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
expires 12h;
error_log off;
access_log /dev/null;
}
access_log /www/wwwlogs/pixiv.xyz.log;
error_log /www/wwwlogs/pixiv.xyz.error.log;
}
server
{
listen 80;
listen 443 ssl http2;
server_name ~^([^.]+)\.pximg\.waite\.xyz$;
index index.php index.html index.htm default.php default.htm default.html;
root /www/server/stop;
set $domain $1;
resolver 8.8.8.8;
location ~ .*
{
proxy_set_header Host $domain.pximg.net;
proxy_set_header Referer "https://www.pixiv.net";
proxy_pass https://$domain.pximg.net;
proxy_set_header Accept-Encoding "";
sub_filter "pixiv.net" "pixiv.waite.xyz";
sub_filter "pximg.net" "pximg.waite.xyz";
sub_filter_once off;
sub_filter_types *;
}
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
ssl_certificate /www/server/panel/vhost/cert/pximg.waite.xyz/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/pximg.waite.xyz/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;
#SSL-END
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
error_page 404 /404.html;
error_page 502 /502.html;
#ERROR-PAGE-END
#PHP-INFO-START PHP引用配置,可以注释或修改
include enable-php-00.conf;
#PHP-INFO-END
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/pximg.waite.xyz.conf;
#REWRITE-END
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log off;
access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
expires 12h;
error_log off;
access_log /dev/null;
}
access_log /www/wwwlogs/pximg.waite.xyz.log;
error_log /www/wwwlogs/pximg.waite.xyz.error.log;
}
server
{
listen 80;
server_name ~^([^.]+)\.pixiv\.waite\.xyz$;
index index.php index.html index.htm default.php default.htm default.html;
root /www/server/stop;
#error_page 404 /404.html;
include enable-php.conf;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location ~ /\.
{
deny all;
}
access_log /www/wwwlogs/access.log;
}
include /www/server/panel/vhost/nginx/*.conf;
}
还是502Bad gateway
根据你的信息看了看,你的配置没有问题,访问 https://www.pixiv.waite.xyz/ 可以看到页面正常显示哦。
我访问提示502怎么解决呀(´இ皿இ`)
502的话应该是配置文件不对,把你改好的配置文件贴出来我帮你看下吧( ’ - ’ * )
你可以先自己检查一下修改配置文件的时候有没有替换完全了,尤其是server_name那一行,还有最后修改nginx配置文件 第二步有没有插错地方
|´・ω・)ノ
我贴段自己的宝塔里的nginx配置文件你参考下╮(╯▽╰)╭
server
{
listen 80;
listen 443 ssl http2;
server_name ~^([^.]+)\.pximg\.test.qixiv\.tk$;
index index.php index.html index.htm default.php default.htm default.html;
root /www/server/stop;
set $domain $1;
resolver 8.8.8.8;
location ~ .*
{
proxy_set_header Host $domain.pximg.net;
proxy_set_header Referer "https://www.pixiv.net";
proxy_pass https://$domain.pximg.net;
proxy_set_header Accept-Encoding "";
sub_filter "pixiv.net" "test.qixiv.tk";
sub_filter "pximg.net" "pximg.test.qixiv.tk";
sub_filter_once off;
sub_filter_types *;
}
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html