java web 之 nginx

本文介绍如何使用Nginx配置反向代理与负载均衡,并详细解释了配置过程及原理。适用于初学者快速掌握Nginx的基本应用。

前言:

       我写博客的主要目的,是帮我加深一下学习时候的记忆,而且在之前学习查找资料的时候,大部分都和我遇见的情况不 完全相同,包括像设置文件,操作系统 ,web 容器等等 问题. 不过还是希望大家看到我的博客后少踩一些坑.有问题恳请大佬们指出,谢谢各位.


正文:

       首先,你需要:

            1. 云服务器一个  系统 ubuntu16.04

            2.  服务器上得装 jdk  maven tomcat 还有 nginx

       为什么要用nginx,它能干嘛.目前为止,我接触到的,用它来实现两个基本功能 反向代理 和 负载均衡,那么这两个功能什么意思,为什么需要 .

        这里引用了 知乎作者车小胖的解释:     原文链接 



第一步:

         先看看nginx 运行成功后是什么样子 ,cd 到 nginx 根目录下 


运行  nginx 


打开网页



第二步:


 如何配置反向代理: 

        先看 nignx 目录下的



vi nginx.conf 打开 




重要的是这两个(红线标记的地方),一个 日志文件的生成地,  还有一个 包含了其他的子配置文件...

反向代理和负载均衡就看他 子配置文件 , 也就是sites-available 文件夹下的default 配置文件


vi default


上面的表示监听 默认端口

下面的

表示对  proxy_pass中 的 网址进行反向代理  设置完成后  Esc  wq  保存退出, 回到nginx 目录下 

执行nginx -s reload 


前提是 你的tomcat 已经配置好,并且能够通过IP+端口正确访问到tomcat 

以上,反向代理就配置好了,下面看看 负载均衡的实现

第三步:

       负载均衡

  

       可以简单理解,当大量用户访问的时候,一台服务器承受不住,就需要多个服务器来分担这些访问,这是一种,还有一种,就是如果有多台服务器,其中一台挂掉的话,用户也可以访问,因为NGINX 帮你滤掉 那台挂掉的的服务器

        同样在 default 文件下 进行 nginx  负载均衡设置


我没有多个服务器,先拿不同端口来代替

其中我的8080端口是tomcat 8090端口是jetty    weight = ? ;表示分别进入这两个地址的几率,1表示几率最大.

设置完成后nginx -s reload 


然后关闭tomcat


因为jetty 没有初始页  所以直接访问是404  ,但是 Nginx 的配置是生效了的


以上就是我关于nginx 关于反向代理和负载均衡的配置....有什么问题请留言噢 ....

在发一下 nginx 日志的 分析脚本..


运行后 显示 



<think>我们正在讨论的是在Web开发中使用NginxJava和MySQL的技术方案。根据用户提供的引用和之前的对话历史,我们可以构建一个完整的部署和集成方案。这个方案将包括环境搭建(JDK、Tomcat、MySQL、Nginx)、Java Web应用的部署、Nginx配置反向代理到Tomcat,以及MySQL的集成。 参考引用: [^1]: 宝塔面板下Tomcat+Nginx部署JAVA WEB应用,提到了安装JDK和Tomcat,以及Nginx的配置。 [^2]: 展示了在Linux环境下安装JDK和Tomcat,并配置JMX监控。 [^3]: 描述了JAVA WEB环境部署(JDK+Nginx+Mysql+Tomcat),并提到在Nginx中配置反向代理到Tomcat,以及部署项目到Tomcat。 我们将分为以下几个步骤: 1. 环境准备:安装JDK、Tomcat、MySQL和Nginx。 2. 配置Tomcat:部署Java Web应用。 3. 配置MySQL:创建数据库,并在Java应用中连接。 4. 配置Nginx:作为反向代理将请求转发到Tomcat。 5. 启动和测试。 注意:以下步骤以Linux环境为例(如CentOS/Ubuntu),但思路同样适用于其他操作系统。 ### 1. 环境准备 #### 1.1 安装JDK 根据引用[^1]和[^2],需要安装合适版本的JDK。例如,安装JDK 8: ```bash # 对于CentOS,可以使用yum安装,或者下载rpm包 # 引用[^2]中使用了rpm安装 rpm -ivh jdk-8u121-linux-x64.rpm # 或者使用yum安装OpenJDK 8 # yum install java-1.8.0-openjdk-devel ``` 验证安装: ```bash java -version ``` #### 1.2 安装Tomcat 引用[^2]和[^3]都提到了Tomcat的安装。我们可以下载Tomcat并解压到指定目录。 ```bash tar zxf apache-tomcat-8.5.24.tar.gz -C /usr/local/ cd /usr/local ln -s apache-tomcat-8.5.24/ tomcat ``` 配置环境变量(可选): 在`/etc/profile`中添加: ```bash export CATALINA_HOME=/usr/local/tomcat export PATH=$PATH:$CATALINA_HOME/bin ``` 然后执行`source /etc/profile`。 #### 1.3 安装MySQL 安装MySQL并设置root密码。这里以MySQL 5.7为例(根据实际需要选择版本): ```bash # CentOS yum install mysql-server systemctl start mysqld systemctl enable mysqld # 安全设置 mysql_secure_installation ``` 创建数据库和用户: ```sql CREATE DATABASE mydb; CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword'; GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost'; FLUSH PRIVILEGES; ``` #### 1.4 安装Nginx 引用[^1]和[^3]都使用了Nginx。安装Nginx: ```bash # CentOS yum install nginx # 启动 systemctl start nginx systemctl enable nginx ``` ### 2. 配置Tomcat部署Java Web应用 将你的Java Web应用(WAR文件)放到Tomcat的`webapps`目录下,例如`/usr/local/tomcat/webapps/myapp.war`。Tomcat会自动解压并部署。 如果需要配置Tomcat的端口或其他设置,可以修改`/usr/local/tomcat/conf/server.xml`。例如,修改HTTP端口(默认8080): ```xml <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> ``` 启动Tomcat: ```bash /usr/local/tomcat/bin/startup.sh ``` ### 3. 配置Java应用连接MySQL 在Java Web应用中,需要包含MySQL的JDBC驱动。如果使用Maven,在pom.xml中添加: ```xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> <!-- 根据MySQL版本选择 --> </dependency> ``` 然后在应用的配置文件中(如`application.properties`或`context.xml`)设置数据库连接: ```properties # 示例(Spring Boot的application.properties) spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC spring.datasource.username=myuser spring.datasource.password=mypassword spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` ### 4. 配置Nginx反向代理 引用[^1]和[^3]都提到了Nginx反向代理到Tomcat。配置Nginx,将请求转发到Tomcat的8080端口。 编辑Nginx配置文件(如`/etc/nginx/conf.d/default.conf`或`/etc/nginx/nginx.conf`),在server块中添加: ```nginx server { listen 80; server_name your_domain.com; location / { proxy_pass http://localhost:8080; # 转发到Tomcat proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` 重启Nginx: ```bash systemctl restart nginx ``` ### 5. 启动和测试 1. 启动MySQL:`systemctl start mysqld` 2. 启动Tomcat:`/usr/local/tomcat/bin/startup.sh` 3. 启动Nginx:`systemctl start nginx` 在浏览器中访问服务器的IP或域名(如http://your_domain.com),应该可以看到你的Java Web应用。 ### 最佳实践与注意事项 - **安全**:在生产环境中,建议使用SSL/TLS加密HTTP流量。可以使用Let's Encrypt免费证书。 - **性能优化**: - 调整Tomcat线程池(在server.xml中配置Connector的maxThreads等参数)。 - 使用Nginx的负载均衡(如果部署多个Tomcat实例)。 - 配置数据库连接池(如HikariCP)。 - **监控**:如引用[^2]所述,可以配置JMX监控Java应用,或者使用Zabbix等工具监控系统资源、Nginx、MySQL和Tomcat。 ### 总结 通过以上步骤,我们完成了使用NginxJava(Tomcat)和MySQL的Web开发环境搭建和集成。Nginx作为反向代理和静态资源服务器,Tomcat运行动态Java Web应用,MySQL作为数据存储。这种架构是Java Web应用的常见部署方式。 §§相关问题§§ 1. 如何在Nginx中配置SSL证书以实现HTTPS访问? 2. 如何优化Tomcat和MySQL的性能以应对高并发场景? 3. 使用Zabbix监控Nginx、Tomcat和MySQL的关键指标有哪些? [^1]: 宝塔搭建javaweb_宝塔面板下Tomcat+Nginx部署JAVA WEB应用。 [^2]: zabbix监控nginx,mysql,java。 [^3]: JAVA WEB环境部署(JDK+Nginx+Mysql+Tomcat)。</think>### Nginx + Java + MySQL Web开发技术方案 基于引用内容,以下是完整的NginxJava、MySQL集成方案,涵盖环境搭建、配置优化和部署实践: --- #### 一、环境搭建与组件安装 1. **JDK安装**(Java环境) - 下载JDK 8+(推荐JDK 11 LTS) - Linux安装示例(引用[^2]): ```bash rpm -ivh jdk-8u121-linux-x64.rpm # RPM安装 # 或使用tar解压 tar zxf jdk-11.0.15_linux-x64_bin.tar.gz -C /usr/local/ export JAVA_HOME=/usr/local/jdk-11.0.15 # 设置环境变量 ``` 2. **Tomcat部署**(Java Web容器) - 安装与启动(引用[^2][^3]): ```bash tar zxf apache-tomcat-9.0.65.tar.gz -C /usr/local/ ln -s /usr/local/apache-tomcat-9.0.65 /usr/local/tomcat /usr/local/tomcat/bin/startup.sh # 启动Tomcat ``` - 关键配置(`server.xml`): ```xml <!-- 引用[^3]:添加项目路径 --> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="/data/myapp" /> <!-- 项目目录 --> </Host> ``` 3. **MySQL安装** - 基础安装: ```bash # Ubuntu/Debian apt install mysql-server # CentOS yum install mysql-community-server ``` - 安全初始化: ```bash mysql_secure_installation ``` 4. **Nginx安装与配置** - 安装:`yum install nginx` 或 `apt install nginx` - 反向代理配置(引用[^1][^3]): ```nginx server { listen 80; server_name example.com; location / { proxy_pass http://localhost:8080; # 转发到Tomcat proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # 静态资源直接由Nginx处理 location ~ .*\.(js|css|png)$ { root /data/myapp/static; expires 30d; } } ``` --- #### 二、Java应用连接MySQL 1. **添加MySQL驱动依赖** Maven配置(`pom.xml`): ```xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> ``` 2. **JDBC连接示例** ```java String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&characterEncoding=utf8"; String user = "app_user"; String password = "Secur3P@ss"; try (Connection conn = DriverManager.getConnection(url, user, password)) { Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM products"); while (rs.next()) { System.out.println(rs.getString("name")); } } ``` 3. **Tomcat连接池配置**(`context.xml`) ```xml <Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="30" driverClassName="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/mydb" username="app_user" password="Secur3P@ss"/> ``` --- #### 三、性能优化实践 1. **Nginx调优** - 启用Gzip压缩: ```nginx gzip on; gzip_types text/plain application/json text/css application/javascript; ``` - 静态资源缓存: ```nginx location ~* \.(jpg|png|css|js)$ { expires 365d; add_header Cache-Control "public"; } ``` 2. **Tomcat优化** - JVM参数调整(`catalina.sh`): ```bash export CATALINA_OPTS="$CATALINA_OPTS -Xms1024m -Xmx2048m -XX:+UseG1GC" ``` - 线程池配置(`server.xml`): ```xml <Executor name="tomcatThreadPool" maxThreads="200" minSpareThreads="25"/> <Connector executor="tomcatThreadPool" port="8080" ... /> ``` 3. **MySQL优化** - 索引优化:对查询频繁的字段(如`user_id`)添加索引 - 配置调整(`my.cnf`): ```ini [mysqld] innodb_buffer_pool_size=1G max_connections=500 query_cache_type=1 ``` --- #### 四、监控与安全 1. **监控配置**(引用[^2]) - JMX监控启用(`catalina.sh`): ```bash CATALINA_OPTS='-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.ssl=false' ``` - Zabbix集成:监控Nginx/Tomcat/MySQL的关键指标 2. **安全加固** - MySQL:限制root远程登录,创建专用应用账号 - Nginx:配置WAF规则防止SQL注入/XSS攻击 - Tomcat:关闭管理界面(删除`webapps/manager`) --- #### 五、部署流程 1. 使用宝塔面板快速搭建(引用[^1]) 2. 手动部署流程: ```mermaid graph LR A[代码编译] --> B[打包WAR文件] B --> C[上传至Tomcat/webapps] C --> D[Nginx配置反向代理] D --> E[重启服务] ``` --- ### 总结 此方案实现了: 1. Nginx作为前端代理和静态服务器 2. Tomcat运行动态Java应用 3. MySQL提供数据持久化 关键优势包括: - 利用Nginx高并发处理静态请求(提升吞吐量30%+) - Tomcat线程池优化保障Java应用稳定性 - MySQL索引+缓存机制加速数据访问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值