Nginx简介及代码示例

文章介绍了Nginx作为高性能HTTP和反向代理服务器的角色,强调了其热部署、负载均衡策略(轮询、权重、IP哈希)以及动静分离的能力。通过配置示例展示了如何进行反向代理到Java应用、启用HTTP缓存和SSL终端代理,同时提及了Nginx在处理静态内容和保持session连续性方面的优势。
摘要由CSDN通过智能技术生成

Nginx是一个高性能的HTTP和反向代理web服务器,它能够提供静态文件服务、负载均衡、HTTP缓存、SSL终端代理、Gzip压缩等功能。

Nginx支持热部署,启动简单,可以做到7*24不间断运行。几个月都不需要重新启动。

Nginx的反向代理(扩展:正向代理)
在这里插入图片描述
正向代理: 浏览器中配置代理服务器
反向代理: 在服务器中配置代理服务器,客户端对代理是无感知的,客户端不需要任何配置就可以访问。此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的地址。

Nginx的负载均衡
负载均衡简单来说就是:现有的请求使服务器压力太大无法承受,我们需要搭建一个服务器集群,去分担原先一个服务器所承受的压力,那现在我们有ABCD等等多台服务器,我们需要把请求分给这些服务器,但是服务器可能大小也有自己的不同,所以怎么分?如何分配更好?又是一个问题。

Nginx给出来三种关于负载均衡的方式:
轮询法(默认方法): 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 适合服务器配置相当,无状态且短平快的服务使用。也适用于图片服务器集群和纯静态页面服务器集群。
weight权重模式(加权轮询): 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的 情况。 这种方式比较灵活,当后端服务器性能存在差异的时候,通过配置权重,可以让服务器的性能得到充分发挥,有效利用资源。weight和访问比率成正比,用于后端服务器性能不均的情况。权重越高,在被访问的概率越大
ip_hash: 在负载均衡系统中,假如用户在第二次请求的时候,会重新定位服务器,其登录信息session将会丢失。 ip_hash指令解决了这个问题,如果客户曾经访问了某个服务器,当用户再次访问时,会通过哈希算法,自动定位到该服务器。按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session丢失的问题。

Nginx的动静分离
Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。
在这里插入图片描述

下面是在Java项目中使用Nginx的一些实际代码示例:

  1. 配置Nginx反向代理

假设Java应用部署在本机的8080端口,可以通过Nginx反向代理进行访问。在Nginx的配置文件(一般是nginx.conf)中加入以下内容:

# 定义upstream,将请求转发到Java应用的8080端口
upstream backend {
    server 127.0.0.1:8080;
}

# 定义server,将所有请求都转发到upstream
server {
    listen 80;
    server_name myapp.com;
    location / {
        proxy_pass http://backend;
    }
}
  1. 开启HTTP缓存

可以使用Nginx的缓存功能对Java应用返回的静态资源进行缓存,减轻Java应用的负担。在Nginx的配置文件中加入以下内容:

# 定义缓存的路径和过期时间
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=myapp-cache:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_valid 200 304 10m;

# 配置location,开启缓存并设置缓存的路径和名称
location /static/ {
    proxy_cache myapp-cache;
    proxy_cache_valid 200 1d;
    proxy_cache_bypass $http_pragma;
    proxy_cache_revalidate on;
    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_ignore_headers Cache-Control;
}
  1. 开启SSL终端代理

可以使用Nginx作为SSL终端代理,将SSL请求转发给Java应用进行处理。在Nginx的配置文件中加入以下内容:

# 定义证书和私钥的路径和文件名
ssl_certificate /etc/nginx/certs/myapp.crt;
ssl_certificate_key /etc/nginx/certs/myapp.key;

# 配置server,开启SSL和SSL终端代理,并将请求转发到Java应用
server {
    listen 443 ssl;
    server_name myapp.com;
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;
    location / {
        proxy_pass http://backend;
        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_ssl_session_reuse on;
        proxy_ssl_verify off;
    }
}

以上是Nginx在Java项目中的一些实际代码示例,其中还包括一些高级用法,如负载均衡、Gzip压缩等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值