Tomcat 屏蔽IP

只要将这段话加入tomcat的server.xml的两个HOST之间即可

<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.242.68.148,192.168.242.68.127"/>

 

这样除了allow以外的ip的访问都将遭到拒绝。

 

如果添加 deny属性,将屏蔽deny所包括的ip

<Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="192.168.242.68.148,192.168.242.68.127"/>

<think>我们被要求使用Ansible来自动化部署Nginx和Tomcat。根据引用内容,Ansible是一个自动化配置管理工具,可以用于部署应用程序和管理多台服务器。我们将设计一个方案,包括编写Ansible playbook来配置Tomcat和Nginx。 步骤: 1. 在Ansible控制节点(server1)上准备好主机清单(inventory),包含要部署的服务器(server2和server3)。 2. 编写playbook,其中包含两个主要部分:部署Tomcat和部署Nginx。 3. 考虑到安全,根据引用[5],我们应该避免使用root用户运行Tomcat,因此我们将创建一个专用用户(如tomcat)来运行Tomcat服务。 4. 配置Nginx作为反向代理,将请求转发给Tomcat。 详细步骤: 一、Tomcat部署: a. 创建tomcat用户和组。 b. 下载Tomcat安装包(从Apache官网)。 c. 解压安装包到指定目录(如/opt/tomcat)。 d. 设置目录权限,确保tomcat用户有权限运行。 e. 配置systemd服务文件,以便管理Tomcat服务。 f. 启动Tomcat服务。 二、Nginx部署: a. 安装Nginx(使用包管理器,如yum或apt)。 b. 配置Nginx作为反向代理,将请求转发到Tomcat(默认端口8080)。 c. 启动Nginx服务。 三、安全考虑: - 确保Tomcat不以root运行(使用专用用户)。 - 配置防火墙规则(如果需要)。 我们将编写一个playbook,包含两个role:一个用于Tomcat,一个用于Nginx。但为了简化,我们也可以在一个playbook中完成。 示例playbook结构: 1. 定义主机组:比如[web_servers],包含server2和server3。 2. 在web_servers上执行两个role:tomcat和nginx。 由于引用[4]中提到一个类似的环境(server2和server3同时部署了nginx和httpd,但这里我们需要Tomcat),我们可以参考。 具体步骤: 1. 创建目录结构: ``` ansible-tomcat-nginx/ ├── inventory ├── playbook.yml ├── roles │ ├── nginx │ │ ├── tasks │ │ │ └── main.yml │ │ └── templates │ │ └── nginx.conf.j2 │ └── tomcat │ ├── tasks │ │ └── main.yml │ ├── templates │ │ └── server.xml.j2 # 可选,如果需要修改Tomcat配置 │ └── vars │ └── main.yml ``` 2. 在inventory文件中定义主机组: ``` [web_servers] server2 ansible_host=172.25.83.2 server3 ansible_host=172.25.83.3 ``` 3. 在playbook.yml中引用这些role: ```yaml - hosts: web_servers become: yes roles: - tomcat - nginx ``` 4. 在tomcat role的vars/main.yml中定义变量: ```yaml tomcat_version: 9.0.65 tomcat_install_dir: /opt/tomcat tomcat_user: tomcat tomcat_group: tomcat ``` 5. 在tomcat role的tasks/main.yml中编写任务: ```yaml - name: Create group for Tomcat group: name: "{{ tomcat_group }}" state: present - name: Create user for Tomcat user: name: "{{ tomcat_user }}" group: "{{ tomcat_group }}" system: yes create_home: no - name: Download Tomcat get_url: url: "https://archive.apache.org/dist/tomcat/tomcat-9/v{{ tomcat_version }}/bin/apache-tomcat-{{ tomcat_version }}.tar.gz" dest: "/tmp/apache-tomcat-{{ tomcat_version }}.tar.gz" - name: Install Tomcat unarchive: src: "/tmp/apache-tomcat-{{ tomcat_version }}.tar.gz" dest: "{{ tomcat_install_dir }}" remote_src: yes extra_opts: [--strip-components=1] owner: "{{ tomcat_user }}" group: "{{ tomcat_group }}" - name: Configure systemd service for Tomcat template: src: tomcat.service.j2 # 需要创建这个模板文件 dest: /etc/systemd/system/tomcat.service notify: restart tomcat - name: Ensure Tomcat is enabled and started service: name: tomcat state: started enabled: yes ``` 6. 创建模板文件tomcat.service.j2(放在templates目录下): ``` [Unit] Description=Apache Tomcat 9 After=network.target [Service] Type=forking User={{ tomcat_user }} Group={{ tomcat_group }} Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64" Environment="CATALINA_PID={{ tomcat_install_dir }}/temp/tomcat.pid" Environment="CATALINA_HOME={{ tomcat_install_dir }}" Environment="CATALINA_BASE={{ tomcat_install_dir }}" ExecStart={{ tomcat_install_dir }}/bin/startup.sh ExecStop={{ tomcat_install_dir }}/bin/shutdown.sh Restart=on-failure [Install] WantedBy=multi-user.target ``` 注意:这里JAVA_HOME需要根据目标系统调整,或者可以设置为变量。 7. 在nginx role的tasks/main.yml中编写任务: ```yaml - name: Install Nginx apt: # 如果是CentOS,则使用yum name: nginx state: present - name: Configure Nginx as reverse proxy for Tomcat template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf notify: restart nginx - name: Ensure Nginx is enabled and started service: name: nginx state: started enabled: yes ``` 8. 在nginx role的templates/nginx.conf.j2中配置反向代理: ```nginx user www-data; worker_processes auto; pid /run/nginx.pid; events { worker_connections 768; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # 配置访问日志 access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; # 配置反向代理 upstream tomcat_servers { server 127.0.0.1:8080; } server { listen 80; server_name _; location / { proxy_pass http://tomcat_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } ``` 9. 在playbook中定义handler来处理服务重启: 在tomcat和nginx的tasks中,我们在修改配置文件后使用了notify来调用handler。因此,在每个role中创建handlers/main.yml: 对于tomcat role的handlers/main.yml: ```yaml - name: restart tomcat service: name: tomcat state: restarted enabled: yes ``` 对于nginx role的handlers/main.yml: ```yaml - name: restart nginx service: name: nginx state: restarted ``` 10. 运行playbook: 在控制节点上执行:ansible-playbook -i inventory playbook.yml 注意:以上示例假设目标系统是Ubuntu/Debian,如果是CentOS/RHEL,需要调整安装Nginx和Java的方式。 另外,为了确保Java已安装,我们可以在tomcat role中添加安装Java的任务: ```yaml - name: Install OpenJDK 11 apt: name: openjdk-11-jdk state: present ``` 或者使用变量适配不同系统。 安全加固:确保Tomcat的管理接口不被公开访问,可以在Nginx配置中屏蔽敏感路径,或者配置Tomcat只监听localhost(127.0.0.1)的8080端口。 在Tomcat的server.xml中,可以修改Connector的address属性: ```xml <Connector port="8080" protocol="HTTP/1.1" address="127.0.0.1" ... /> ``` 因此,我们可以在tomcat role中添加一个任务来修改server.xml(使用模板替换)。 由于我们使用模板来生成server.xml,我们可以创建一个server.xml.j2模板,并修改Connector的address为127.0.0.1。 这样,Tomcat只监听本地,然后由Nginx反向代理访问。 以上就是一个基本的自动化部署方案。根据具体需求,可能还需要配置防火墙、SELinux等。 参考文献: [^1]: 提到了Ansible用于全栈应用的自动化部署,包括Nginx和Tomcat。 [^2]: 介绍了Ansible的基本信息。 [^3]: 介绍了Ansible的架构。 [^4]: 提供了一个类似的多主机部署示例。 [^5]: 强调了Tomcat不要以root用户运行。 相关问题: 1. 如何确保Ansible playbook的幂等性? 2. 如何优化Ansible playbook的执行速度? 3. 在Ansible中如何处理不同操作系统的差异(如CentOS和Ubuntu)? 4. 如何对Tomcat和Nginx进行安全加固? 5. 如何使用Ansible Vault保护敏感数据(如密码)?</think>### 使用 Ansible 自动化部署 Nginx 和 Tomcat 以下是完整的自动化部署方案,通过 Ansible Playbook 实现 Nginx 作为反向代理转发请求到 Tomcat 应用服务器。 --- #### 一、基础环境准备 1. **Ansible 控制节点配置**(在 `server1` 操作): ```bash # 安装 Ansible sudo apt install ansible -y # Ubuntu/Debian sudo yum install ansible -y # CentOS/RHEL # 配置主机清单(/etc/ansible/hosts) [web_servers] server2 ansible_host=172.25.83.2 server3 ansible_host=172.25.83.3 # 配置 SSH 免密登录 ssh-copy-id root@server2 ssh-copy-id root@server3 ``` --- #### 二、Ansible Playbook 结构 ```bash deploy/ ├── roles/ │ ├── tomcat/ │ │ ├── tasks/ │ │ │ └── main.yml │ │ ├── templates/ │ │ │ ├── server.xml.j2 │ │ │ └── tomcat.service.j2 │ ├── nginx/ │ │ ├── tasks/ │ │ │ └── main.yml │ │ └── templates/ │ │ └── nginx.conf.j2 └── playbook.yml ``` --- #### 三、核心配置详解 1. **Tomcat 部署配置** (`roles/tomcat/tasks/main.yml`) ```yaml - name: 创建专用用户(避免 root 权限风险[^5]) user: name: tomcat system: yes shell: /sbin/nologin - name: 安装 JDK apt: name: openjdk-11-jdk state: present - name: 下载 Tomcat get_url: url: "https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.65/bin/apache-tomcat-9.0.65.tar.gz" dest: /tmp/tomcat.tar.gz - name: 解压并安装 Tomcat unarchive: src: /tmp/tomcat.tar.gz dest: /opt/ remote_src: yes owner: tomcat group: tomcat - name: 配置 Tomcat 服务 template: src: tomcat.service.j2 dest: /etc/systemd/system/tomcat.service notify: restart tomcat - name: 配置 server.xml template: src: server.xml.j2 dest: /opt/apache-tomcat-9.0.65/conf/server.xml notify: restart tomcat - name: 启动并启用 Tomcat systemd: name: tomcat state: started enabled: yes ``` 2. **Nginx 反向代理配置** (`roles/nginx/tasks/main.yml`) ```yaml - name: 安装 Nginx apt: name: nginx state: present - name: 配置反向代理 template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf notify: restart nginx - name: 启动并启用 Nginx systemd: name: nginx state: started enabled: yes ``` 3. **Nginx 模板** (`roles/nginx/templates/nginx.conf.j2`) ```nginx http { upstream tomcat_cluster { server server2:8080; server server3:8080; } server { listen 80; location / { proxy_pass http://tomcat_cluster; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } ``` 4. **主 Playbook** (`playbook.yml`) ```yaml - hosts: web_servers become: yes roles: - tomcat - nginx handlers: - name: restart tomcat systemd: name: tomcat state: restarted - name: restart nginx systemd: name: nginx state: restarted ``` --- #### 四、执行部署 ```bash ansible-playbook -i /etc/ansible/hosts playbook.yml ``` --- #### 五、验证部署 1. **检查服务状态**: ```bash ansible web_servers -a "systemctl status tomcat" ansible web_servers -a "systemctl status nginx" ``` 2. **访问测试**: - 浏览器访问 `http://server2` 或 `http://server3`,应显示 Tomcat 默认页 - Nginx 日志检查:`tail -f /var/log/nginx/access.log` --- #### 关键安全措施 1. Tomcat 使用非 root 用户运行(`tomcat` 用户),避免权限风险[^5] 2. Nginx 屏蔽直接访问 Tomcat 端口(仅开放 80 端口) 3. 通过 `upstream` 模块实现负载均衡,提高可用性 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值