折腾:
【未解决】阿里云中二级域名转发中如何实现端口转发
期间,对于二级域名来说,已经通过DNS配置好了服务器转发。
现在想要实现基本的端口转发。
需要搞清楚:nginx相关有哪些参数需要配置,以及各个参数的含义是啥
暂时设置为:
server { listen 80; server_name dev.xxx; location /storybook/ { 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://xxx:33800; } access_log /www/wwwlogs/ dev.xxx.log; }
但是一些参数,别的地方
写法不同:
- proxy_set_header Host $http_host;
- 多了:
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_buffering off;
所以还是要去搞清楚这些参数才行
对于很多个:proxy_set_header等参数,都是放在 location之外的
upstream blog.abc.com { server 192.168.1.17:8081 weight=1 max_fails=3 fail_timeout=10s; } server { listen 80; server_name blog.abc.com; server_name_in_redirect off; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass http://blog.abc.com/; } }
nginx server location
location /documents/ { # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索 # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条 [ configuration C ] }
是我此处想要的
“全局变量
* $host : 请求主机头字段,否则为服务器名称。”
另外,由于此处被转发的服务器中记录api访问日志,所以也想要保留其他很多字段:
“* $args : #这个变量等于请求行中的参数,同$query_string
* $content_type : 请求头中的Content-Type字段。
* $http_user_agent : 客户端agent信息
* $request_method : 客户端请求的动作,通常为GET或POST。
* $remote_addr : 客户端的IP地址。
* $remote_port : 客户端的端口。
* $server_port : 请求到达服务器的端口号。
…”
此处要去搞清楚:proxy_pass
这个词的含义
会不会把其他各个信息,包括$request_method等等,都传递过去?
至此,基本上搞懂了基本的location的匹配规则
但是需要再去搞清楚上面所说的很多参数的含义,以及proxy_pass的含义
看到另外一些:
proxy_pass_header
proxy_pass_request_body
不知道和:
proxy_set_header
是什么区别
好像是:
默认proxy_pass_request_headers是on的
—》会自动转发pass传递过去,所有的header?
nginx proxy 含义
【总结】
最后是参考:
想要实现转发的功能的话,则最最基本的配置是:
# server context location /match/here { proxy_pass http://example.com; }
而由于要保留原始的一些header参数和其他参数,则更加常见的配置是:
# server context location /match/here { proxy_set_header HOST $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://example.com/new/prefix; }
而想要proxy的设置针对多个location,可以提取出来,放到公共部分:
# server context proxy_set_header HOST $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_Header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location /match/here { proxy_pass http://example.com/new/prefix; } location /different/match { proxy_pass http://example.com; }
更多的参数的解释,则详见:
和:
nginx的官网:
的例子:
location / { proxy_pass http://localhost:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
而此处自己的设置是:
server { listen 80; server_name dev.xxx; access_log /var/log/nginx/dev.xxx/access.log; error_log /var/log/nginx/dev.xxx/error.log; proxy_set_header HOST $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; location /storybook/ { # proxy_redirect off; # proxy_pass http://xxx:33800; proxy_pass http://xxx:33800/; } }