nginx 使用

1. 应用场景

①反向代理

②负载均衡

③ 实现http 缓存

④动静分离

⑤数据压缩

⑥跨域访问 (响应头添加 允许跨域 的 响应头)

1.

HTTP 协议特点:

简单快速

灵活

无连接

无状态

 

 

 

 

 1.

Nginx 虚拟主机 (Virtual Host)

②Nginx 实现反向代理(反向代理隐藏了真实的服务端,反向代理在服务端)

正向代理:隐藏了真实的客户端(正向代理在客户端)

                 用户 通过 ------>  正向代理 ------> YouTube

安装:

在nginx的根目录打开cmd 输入start nginx启动nginx(此时需要注意,不要直接点击nginx.exe来启动),启动成功或者失败都会有一个黑窗口闪一下,所以看不出来是否成功。可以通过

  • http://localhost:80看是否有nginx的成功提示
  • 查看任务管理器 -> 进程 看有没有nginx判断启动成功与否
  •  常用命令:
  • start nginx 启动nginx
  • nginx -s reload 重新加载配置文件
  • nginx -s quit 关闭
  • nginx -s stop 快速关闭

案例:

启动:

 

反向代理:

server {
	    # 默认是80,这里我改为7077端口,我只需要打开http://localhost:7077就可以看到nginx启动的页面了。
        listen       7077;
		# server_name 指 url 输入的域名或者 IP 
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
		#  proxy_pass 反向代理到哪台机器
		    proxy_pass  http://192.168.43.161:8099;
			# 将请求方法 转为 POST 请求
			proxy_method  POST;
			# 设置请求头 信息 
			
			# 请求头  Host 为key   ,值为  host
			proxy_set_header Host $host;
			#获取客户端的IP 地址设置到 header 中
			# 请求头  X-Real-IP ,值为  remote_addr
			proxy_set_header X-Real-IP $remote_addr;
			# 获取所有转发请求的 ip 信息列表
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           
        }
    }

浏览器访问:

http://localhost:7077/nginx/hello

就可以转到    localhost:8099/nginx/hello 

负载均衡:

 

 

 配置文件:


http {
    include       mime.types;
    #default_type  application/octet-stream;

    #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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
	
	
	
	
	
	# 其他负载策略:
  	#             ip_hash 每个 客户端ip 都打在 同一个服务器上 
	#             least_conn: 当前活跃连接数越小,权重越大,越优先选择
	#             第三方负载均衡模块 fair
	                  # upstream ecif{
					         # fair ;
							 #server  192.168.43.161:8090 weight=2 max_fails=3 fail_timeout=15;
							 #server  192.168.43.161:8091 weight=3 ;
							 #server  192.168.43.161:8092 weight=1;
	
						#}
	# 定义服务组 (默认 是权重 轮训 策略)
	
	upstream ecif{
	 server  192.168.43.161:8090 weight=2 max_fails=3 fail_timeout=15;
	 server  192.168.43.161:8091 weight=3 ;
	 server  192.168.43.161:8092 weight=1;
	
	}

    server {
        listen       7077;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
		    # 服务组
		    proxy_pass  http://ecif;
         
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

       
    }


   
}

③ 实现http 缓存


http {
    include       mime.types;
    default_type  application/octet-stream;

    #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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
	
	
	#  定义缓存文件目录和缓存名称
	# 10 分钟内没有访问就会被过去
	# 缓存文件最多占用 1g 
	proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=nginx01_cache:50m inactive=10m max_size=1g;
	
	
	
	
	
	# 其他负载策略:
  	#             ip_hash 每个 客户端ip 都打在 同一个服务器上 
	#             least_conn: 当前活跃连接数越小,权重越大,越优先选择
	#             第三方负载均衡模块 fair
	                  # upstream ecif{
					         # fair ;
							 #server  192.168.43.161:8090 weight=2 max_fails=3 fail_timeout=15;
							 #server  192.168.43.161:8091 weight=3 ;
							 #server  192.168.43.161:8092 weight=1;
	
						#}
	# 定义服务组 (默认 是权重 轮训 策略)
	
	upstream ecif{
	 server  192.168.43.161:8090 weight=2 max_fails=3 fail_timeout=15;
	 server  192.168.43.161:8091 weight=3 ;
	 server  192.168.43.161:8092 weight=1;
	
	}

    server {
        listen       7077;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
		    # 服务组
		    proxy_pass  http://ecif;
			# nginx01_cache 为共享区域内存名称
			proxy_cache nginx01_cache;
			# 官网可看  nginx 内置的变量
			proxy_cache_key $host$uri$is_args$args;
			# 200 304 状态 的 设置 1分钟
			proxy_cache_valid 200 304 1m;
			# 响应数据给客户端 时候添加头信息,代表 是否 命中缓存
			# ngx_cache_purge  这个第三方模块 可以 清理 缓存
			add_header X-Proxy-Cache $upstream_cache_status ;
			
         
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
		#  含有 purge  就进来,在 url 输入 地址含有 purge  就可以 清空缓存
		location ~ /purge(/.*) {
		   allow all ;
			proxy_cache_purge nginx01_cache $host$uri$is_args$args
			
         
        }

       
    }


   
}

④ 动静分离

#user  nobody;

user  root;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       7077;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
		    #
		    proxy_pass  http://192.168.43.161:8090;
	
        }
		
		 location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
		    # 直接访问目录下的 文件
		    root   /usr/local/soft/nginx/data/static;
	
        }
		
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
		    
    }
 
}

⑤ 数据压缩 (好处:增加传输速度)

 压缩后验证:

 

 ⑥ 跨域访问 

 

这是前段报错了,实际上已经访问到了后台方法。

 方案一:前段 JSONP

  

 方法二:

目标方法上 加 @CrossOrigin

原理:

会在响应方法上加上如下的响应头:

access-control-allow-origin : 具体到 哪个IP(允许 哪个机器 访问 我 )

 

 添加个配置类:

@Configuration

 方法三:

nginx 

① (同源策略:浏览器禁止跨域的访问)

给 响应头 添加 允许跨域的 响应头

location / {
		
		# 该字段是必须的。它的值要么是请求时Origin字段的值,要么是一个*,表示接受任意域名的请求。
		add_header 'Access-Control-Allow-Origin' '*';
		# 该字段可选。它的值是一个布尔值,表示是否允许发送Cookie。
		#  默认情况下,Cookie不包括在CORS请求之中。设为true,即表示服务器明确许可,
		#  Cookie可以包含在请求中,一起发给服务器。这个值也只能设为true,
		#  如果服务器不要浏览器发送Cookie,删除该字段即可
		add_header 'Access-Control-Allow-Credentials' 'true';
		# 该字段是必须的,用来列出浏览器的CORS请求会用到哪些HTTP方法,上例是PUT。
		add_header 'Access-Control-Allow-Methods' '*';
		add_header Access-Control-Allow-Headers *;
            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://localhost:8080;
        }

or: WebMvcConfigurer接口

@Configuration
public class WebMvcConfig implements WebMvcConfigurer{

@Override
public void addCorsMappings(CorsRegistry registry) {
    super.addCorsMappings(registry);
    registry.addMapping("/**")
            .allowedHeaders("*")
            .allowedMethods("POST","GET")
            // 允许跨域
            .allowedOrigins("*");
 }

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值