折腾:
【未解决】阿里云中二级域名转发中如何实现端口转发
期间,对于二级域名来说,已经通过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/;
}
}