学习设置反向代理

   一、在宝塔中设置
   利用“域名+端口号”建立了一个站点,在浏览过程中,网址总要输入端口,比较麻烦且有碍观瞻,于是考虑如何去掉端口号。网络上搜索了一圈,大部分建议都是使用Nginx的反向代理功能,参考了多篇文章进行设置,但都没有成功。(如:《利用nginx反向代理,不花一分钱去掉地址栏烦人的端口号》,游猫-cium,https://blog.csdn.net/qwex888/article/details/117255825?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-117255825-blog-105736551.235%5Ev27%5Epc_relevant_recovery_v2&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-117255825-blog-105736551.235%5Ev27%5Epc_relevant_recovery_v2&utm_relevant_index=1 )不同的尝试出现了不同的错误提示,如下:
   (一)
   nginx: [emerg] “proxy_pass” cannot have URI part in location given by regular expression, or inside named location, or inside “if” statement, or inside “limit_except” block in /www/server/panel/vhost/nginx/我的域名.conf:53
   nginx: configuration file /www/server/nginx/conf/nginx.conf test failed
   (二)
   nginx: [emerg] duplicate location “/” in /www/server/panel/vhost/rewrite/我的域名.conf:1
   nginx: configuration file /www/server/nginx/conf/nginx.conf test failed
   (三)
   nginx: [emerg] “proxy_pass” cannot have URI part in location given by regular expression, or inside named location, or inside “if” statement, or inside “limit_except” block in /www/server/panel/vhost/nginx/我的域名.conf:50
   nginx: configuration file /www/server/nginx/conf/nginx.conf test failed
  (四)
   nginx: [emerg] “proxy_pass” cannot have URI part in location given by regular expression, or inside named location, or inside “if” statement, or inside “limit_except” block in /www/server/panel/vhost/nginx/我的域名.conf:53
   nginx: configuration file /www/server/nginx/conf/nginx.conf test failed
   多次尝试无果,想着用用GPT吧,于是使用https://chat.yqcloud.top/进行提问,看能否解决问题。
   我问:你好。你是网络工程师。在配置宝塔的反向代理时,对于下面的提示,请问如何解决?nginx: [emerg] “proxy_pass” cannot have URI part in location given by regular expression, or inside named location, or inside “if” statement, or inside “limit_except” block in /www/server/panel/vhost/nginx/我的域名.conf:53 nginx: configuration file /www/server/nginx/conf/nginx.conf test failed
   https://chat.yqcloud.top/回答:你好!根据错误提示,这个错误是由于反向代理配置中的 proxy_pass 指令所在的 location 块使用了正则表达式,并且 proxy_pass 中包含了 URI 部分,这是不被允许的。解决这个问题需要对 proxy_pass 进行调整。
   解决方法如下:
1.打开宝塔面板,进入网站设置页面,找到反向代理设置。
   2.找到引起问题的 location 块,将其修改成普通的 location 块。例如:
nginx复制代码
# 原来的配置
location ~ ^/blog/(.*)$ {
    proxy_pass http://127.0.0.1:8080/blog/$1;
}
# 修改后的配置
location /blog/ {
    proxy_pass http://127.0.0.1:8080/;
}
注意这里的 proxy_pass 后面不再带有 URI 部分,而是直接将请求转发给 http://127.0.0.1:8080/。
3.将修改后的配置保存,并重新启动 Nginx 服务使其生效。
如果还有其他类似的配置出现同样的错误,也需要采用类似的方式修改。
希望这个解决方法能够解决你的问题!
使用https://chatbot.theb.ai/进行提问,其回答:
你好,这个错误提示是因为在使用正则表达式配置反向代理的时候,在location中不能包含proxy_pass的URI部分。可以修改配置文件,将proxy_pass指令移动到一个非正则表达式的location块中,或者使用变量来避免在正则表达式中直接使用proxy_pass。
例如,可以将你的配置文件更改为下面的样子:
Copy Code
server {
  listen 80;
  server_name 我的域名;
  location / {
    # 其他配置
  }
  location ~ \.php$ {
    # PHP相关配置
  }
  # 将proxy_pass指令移动到非正则表达式的location块中
  location /api/ {
    proxy_pass http://api.example.com/;
    proxy_set_header Host api.example.com;
  }
  # 其他配置
}
注意,上述示例中的/api/应该替换为你需要代理的URI路径。另外,需要确保占用80端口的服务已经停止,否则会出现端口冲突导致Nginx无法启动的情况。
综上,自己在配置文件中提到的文件做了以下修改,新增以下代码 :
     # 将proxy_pass指令移动到非正则表达式的location块中
  location /api/ {
    proxy_pass http://api.example.com/;
    proxy_set_header Host api.example.com;
  }
/api/进行了替换,但是,没有成功。后面继续学习吧。
二、通过域名转发进行设置
参考了《WordPress下二级子域名转发全过程记录(子域转发)》(AlvinCasper, https://blog.csdn.net/AlvinCasper/article/details/105952033)。通过域名转发的方式进行尝试。
首先,在DNS解析处新建子域名。
然后,将子域名转发到带端口的网址上。
但是,仍然没有成功。因为页面打不开了。

发表评论