Nginx 反向代理 Tomcat 传递自定义 Head 问题总结

本文详细解析了在使用Nginx进行反向代理Tomcat时,如何配置proxy_pass与proxy_set_header来正确传递自定义Head信息。特别指出移动端业务服务配置中,需注意Head信息的转发方式,特别是对于含有下划线分隔的自定义信息的处理。同时,介绍了在HTTP配置中如何启用underscores_in_headers特性以确保自定义Head信息能够被正确转发。

原文地址:http://blog.youkuaiyun.com/johnnycode/article/details/48262191

Nginx 反向代理 Tomcat 传递自定义 Head 信息遇到几个问题总结一下!

1. Nginx 若只配置 proxy_pass 则不会将原始请求 Head 向 Tomcat 转发,必须配置 proxy_set_header !

    #移动端业务服务配置
    server {
    listen       80;
    server_name  mobile.abc.com;
    access_log logs/access-mobile.log main;
    error_log  logs/error-mobile.log;

        location / {
                proxy_pass http://127.0.0.1:8060/mobile_service/;
                proxy_set_header HOST $HOST;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Request-Url $request_uri;
            }
    }
2.若请求 Head 信息中存在自定义信息并且以 "_" 下划线间隔,则必须配置underscores_in_headers 否则 Head 无法向 Tomcat 转发!
http {
    include       mime.types;
    default_type  application/octet-stream;
    
    underscores_in_headers on; #自定义 Head 必须定义

    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;
    ...此处省略...
<think>好的,我现在需要处理用户提供的关于部署Java应用的详细步骤。首先,我需要仔细分析用户的问题,确保理解每个步骤的要求。 用户的问题分为几个部分:环境配置、网站创建、Java环境安装、数据库导入和配置修改,以及后台的域名替换和启动应用。首先,我需要确认用户的环境是PHP 7.4、MySQL 5.7、Nginx 1.2、Tomcat 8和Redis,并且需要放行所有端口1-65535。这可能涉及到防火墙设置,比如iptables或firewalld的配置,但用户可能已经处理好了这部分。 接下来是创建五个子域名,每个都需要配置Nginx反向代理,特别是api子域名要代理到本地的8091端口。这里需要注意Nginx的配置文件结构,每个server块对应一个子域名,设置正确的server_name和proxy_pass。同时,FTP的创建可能需要使用vsftpd或其他FTP服务器,指定目录到新建的ftp文件夹。 然后是安装Java环境,用户提到使用yum安装openjdk 1.8,这相对简单,但可能需要确认安装后的版本是否正确,以及环境变量是否设置。 数据库导入部分,用户需要解压stock.jar,修改application.properties和application.yml中的数据库和FTP配置。这里需要注意的是,JAR文件可能需要使用unzip或jar命令解压,修改后重新打包。但直接修改JAR内的文件可能存在问题,更好的方式是在外部配置文件中覆盖这些属性,比如使用--spring.config.location参数指定外部配置文件。 替换后台JS文件中的域名涉及到搜索并替换所有相关文件中的api.iimii.top为新域名。可能需要使用sed命令进行批量替换,或者在构建过程中处理。 最后,启动应用使用nohup和java -jar命令,检查进程占用内存情况。用户提供的ps命令是查看内存使用前8的进程,可能需要调整以确保应用正常运行。 在回答过程中,需要详细解释每个步骤的原因和可能遇到的问题。例如,Nginx反向代理的设置是为了将API请求转发到Tomcat应用,而修改配置文件时需要确保语法正确,避免服务重启失败。数据库配置错误可能导致连接问题,需要检查用户名、密码和权限。替换域名时,如果遗漏某些文件,可能导致前端请求错误,需全面检查。 同时,用户可能没有提到的一些细节,比如SSL证书配置、服务自启动设置、日志管理等,可能需要作为相关问题提出,帮助用户进一步优化部署。</think><< **环境部署及网站配置步骤说明** 1. **环境配置** ```bash # 防火墙配置(CentOS 7+) firewall-cmd --permanent --add-port=1-65535/tcp firewall-cmd --reload # 检查服务状态 systemctl status nginx mysqld redis ``` 2. **Nginx网站配置** 创建`/etc/nginx/conf.d/api.conf`文件: ```nginx server { listen 80; server_name api.xxx.com; location / { proxy_pass http://127.0.0.1:8091; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` 其他域名配置同理,需修改`server_name`并指定对应root目录 3. **Java环境安装** ```bash yum install -y java-1.8.0-openjdk-devel java -version # 验证安装 ``` 4. **应用配置修改** ```bash # 解压修改配置文件(需安装unzip) unzip -q stock.jar -d stock_temp vi stock_temp/BOOT-INF/classes/application.properties vi stock_temp/BOOT-INF/classes/application.yml # 重新打包 jar -cfM0 stock-modified.jar -C stock_temp/ . ``` 5. **启动应用** ```bash nohup java -Xmx1024m -jar stock-modified.jar --spring.config.location=file:/path/to/external-config/ & ``` **常见问题原因**: - 端口冲突:Tomcat默认8080端口可能被占用 - 权限问题:FTP目录需要正确的用户权限 - 配置错误:YAML缩进错误会导致启动失败 - 域名解析:未配置DNS解析或本地hosts文件 - 内存不足:Java应用需要足够堆内存 **验证命令**: ```bash # 检查端口监听 netstat -tulnp | grep ':8091' # 查看实时日志 tail -f nohup.out ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值