专栏首页Java探索之路Nginx技术(附软件分享)

Nginx技术(附软件分享)

一、介绍

简介

Nginx 是一个很强大的高性能 Web 和反向代理服务,它具有很多非常优越的特性:在连接高并发的情况下,Nginx 是 Apache 服务不错的替代品:Nginx 在美国是做虚拟主机生 意的老板们经常选择的软件平台之一。

作用

搭建虚拟主机 服务的反向代理 在反向代理中配置集群的负载均衡 http 协议代理 对应本文的第五部分

二、代理方式

正向代理

正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然 后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

区别

位置不同 正向代理,架设在客户机和目标主机之间; 反向代理,架设在服务器端; 代理对象不同 正向代理,代理客户端,服务端不知道实际发起请求的客户端; 反向代理,代理服务端,客户端不知道实际提供服务的服务端;

三、安装Nginx

上传1

通过相关软件或者拖拽(部分支持)的形式将其放入虚拟机中,其中一种软件FileZila可以自行下载,使用安装都非常简单

配置安装环境

相关命令

在Linux命令行下输入无需下载
1、  yum install gcc-c++
2、  yum install -y pcre pcre-devel 
3、  yum install -y zlib zlib-devel 
4、  yum install -y openssl openssl-devel 

命令解释

1、安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,,需要安装 gcc 2、PCRE(Perl Compatible Regular Expressions)是一个 Perl 库,包括 perl 兼容的正则表 达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库。pcre-devel 是使用 pcre 开发的一个二次开发库。nginx 也需要此库。 3、zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip, 所以需要在 linux 上安装 zlib 库。 zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip, 所以需要在 linux 上安装 zlib 库。 4、OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥 和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。 nginx 不仅支持 http 协议,还支持 https(即在 ssl 协议上传输 http),所以需要在 linux 安装 openssl 库。

编译安装

1、解压: tar -zxvf nginx-1.8.0.tar.gz 2、创建nginx安装目录 , mkdir /usr/local/nginx 3、在var 下创建相关目录,是nginx正常能够启动 mkdir /var/temp/nginx/client 4、创建运行目录 : 打开nginx-1.8.0的根目录,直接复制输入如下代码块代码(配置安装参数)并回车 5、编译(nginx安装包,nginx根目录下):make 6、编译安装(执行这些操作后, /usr/local/nginx目录下才有东西) make install

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi

四、操作Nginx

启动

cd /usr/local/nginx/sbin/ 
./nginx 

//注意:执行./nginx 启动 nginx,这里可以-c 指定加载的 nginx 配置文件,如下:


./nginx -c /usr/local/nginx/conf/nginx.conf 
//此文件的地址也可以在编译安装 nginx 时指定./configure 的参数 -c (--/conf-path= 指向配置文件(nginx.conf))
//如果想指定要加载的自定义文件使用
//如果不指定-c,nginx 在启动时默认加载 conf/nginx.conf 文件,

停止

快速停止

cd /usr/local/nginx/sbin 
./nginx -s stop 
//此方式相当于先查出 nginx 进程 id 再使用 kill 命令强制杀掉进程

完整停止(建议使用)

cd /usr/local/nginx/sbin 
./nginx -s quit 
//此方式停止步骤是待 nginx 进程处理任务完毕进行停止。 

重启

./nginx -s quit 
./nginx 
//先停止,在启动

测试

nginx 安装成功,启动 nginx,即可访问虚拟机上的 nginx ,在浏览器上直接输入虚拟机的ip地址即可

五、Nginx的使用

虚拟主机的介绍

虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主机,每个虚拟主机可以独立对外提供 www 服务,这样就可以实现一台主机对外提供多个 web 服务,每个虚拟主机之间是独立的,互不影响的。 虚拟主机技术是互联网服务器采用的节省服务器硬件成本的技术,虚拟主机技术主要应用于 HTTP(Hypertext Transfer Protocol,超文本传输协议)服务,将一台服务器的某项或 者全部服务内容逻辑划分为多个服务单位,对外表现为多个服务器,从而充分利用服务器硬 件资源。

配置虚拟主机

需求: 为当前虚拟机绑定两个动态IP

为当前虚拟机动态IP改为静态IP

cd /etc/sysconfig/network-scripts

为当前虚拟机再绑定一个IP地址

将/etc/sysconfig/network-scripts/ifcfg-eth0 文件复制一份,命名为 ifcfg-eth0:1 修改其中内容如上图

重启虚拟机

重启后需要重新启动nginx,可以通过ping你配置好的IP地址来查看绑定的Ip地址是否成功

Nginx 的虚拟主机配置方式

基于IP的虚拟主机配置方式

需求: 一台 Linux 服务器绑定两个 ip:192.168.179.131、192.168.179.162 访问不同的 ip 请求不同的 html 目录,即: 访问 http://192.168.179.131 将访问“html131”目录下的 html 网页 访问 http://192.168.179.162 将访问“html162”目录下的 html 网页

1、复制nginx的根目录下的html文件夹

2、修改每个文件夹内的里面的index.html,使其具有辨识度 3、修改Nginx的配置文件nginx.conf , 根据情况修改server_name,以及访问虚拟主机的web目录

cd /usr/local/nginx/conf/nginx.conf
#基于 IP 的虚拟主机配置方式 
    server {
          listen       80;
		#为虚拟机指定域名
        server_name  192.168.179.131;
	
		#主要配置路由访问信息
        location / {
			#用于指定访问根目录时,访问的虚拟主机的web目录
            root   html131;
			#在不指定访问具体的资源时,默认的展示资源的列表
            index  index.html index.htm;
			
			
        }
		error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
			}
		}
	 server {
          listen       80;
		#为虚拟机指定域名
        server_name  192.168.179.162;
	
		#主要配置路由访问信息
        location / {
			#用于指定访问根目录时,访问的虚拟主机的web目录
            root   html162;
			#在不指定访问具体的资源时,默认的展示资源的列表
            index  index.html index.htm;
        }
     
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        
    }

4、重启nginx并用浏览器访问

./sbin/nginx -s quit ./sbin/nginx

基于端口的虚拟主机配置方式

需求 Nginx 对 8080 与 9090 两个端口的进行监听 (192.168.179.162) 请求 8080 端口则访问 html8080 目录下的 index.html 请求 9090 端口则访问 html9090 目录下的 index.html

1、复制nginx的根目录下的html文件夹 2、修改每个文件夹内的里面的index.html,使其具有辨识度

3、修改Nginx的配置文件nginx.conf

#基于端口的虚拟主机配置方式 
	server {
          listen       8080;
		#为虚拟机指定域名
        server_name  192.168.179.162;
	
		#主要配置路由访问信息
        location / {
			#用于指定访问根目录时,访问的虚拟主机的web目录
            root   html8080;
			#在不指定访问具体的资源时,默认的展示资源的列表
            index  index.html index.htm;
        }
     
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        
    }
	server {
          listen       9090;
		#为虚拟机指定域名
        server_name  192.168.179.162;
	
		#主要配置路由访问信息
        location / {
			#用于指定访问根目录时,访问的虚拟主机的web目录
            root   html9090;
			#在不指定访问具体的资源时,默认的展示资源的列表
            index  index.html index.htm;
        }
     
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        
    }

4、重启nginx并用浏览器访问

./sbin/nginx -s quit
./sbin/nginx

基于域名的虚拟主机配置方式

需求: 两个域名指向同一个 nginx 服务器,用户访问不同的域名时显示不同的内容。 域名规划: 1, www.chy.com 2, www.imepause.cn

0、修改本机电脑的host文件,添加ip地址映射

1、复制nginx的根目录下的html文件夹

2、修改每个文件夹内的里面的index.html,使其具有辨识度 3、修改Nginx的配置文件nginx.conf

#基于域名的虚拟主机配置方式 ,修改server_name
	server {
          listen       80;
		#为虚拟机指定域名
        server_name  www.chy.com;
	
		#主要配置路由访问信息
        location / {
			#用于指定访问根目录时,访问的虚拟主机的web目录
            root   html-chy;
			#在不指定访问具体的资源时,默认的展示资源的列表
            index  index.html index.htm;
			
			
        }
		error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
			}
		}
		server {
          listen       80;
		#为虚拟机指定域名
        server_name  www.timepause.cn;
	
		#主要配置路由访问信息
        location / {
			#用于指定访问根目录时,访问的虚拟主机的web目录
            root   html-timepause;
			#在不指定访问具体的资源时,默认的展示资源的列表
            index  index.html index.htm;
			
			
        }
		error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
			}
		}

4、重启nginx并用浏览器访问

./sbin/nginx -s quit
./sbin/nginx

注意:

1、如果页面显示中文乱码,则需要在相关的index.xml的头部加上如下图的一行代码**

2、至此,nginx.conf修改后的文件如下(可直接复制,只需要根据注释修改即可):

#user  nobody;
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;
	#基于 IP 的虚拟主机配置方式 
    server {
          listen       80;
		#为虚拟机指定域名
        server_name  192.168.179.131;
	
		#主要配置路由访问信息
        location / {
			#用于指定访问根目录时,访问的虚拟主机的web目录
            root   html131;
			#在不指定访问具体的资源时,默认的展示资源的列表
            index  index.html index.htm;
			
			
        }
		error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
			}
		}
	 server {
          listen       80;
		#为虚拟机指定域名
        server_name  192.168.179.162;
	
		#主要配置路由访问信息
        location / {
			#用于指定访问根目录时,访问的虚拟主机的web目录
            root   html162;
			#在不指定访问具体的资源时,默认的展示资源的列表
            index  index.html index.htm;
        }
     
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        
    }
	
	#基于端口的虚拟主机配置方式 
	server {
          listen       8080;
		#为虚拟机指定域名
        server_name  192.168.179.162;
	
		#主要配置路由访问信息
        location / {
			#用于指定访问根目录时,访问的虚拟主机的web目录
            root   html8080;
			#在不指定访问具体的资源时,默认的展示资源的列表
            index  index.html index.htm;
        }
     
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        
    }
	server {
          listen       9090;
		#为虚拟机指定域名
        server_name  192.168.179.162;
	
		#主要配置路由访问信息
        location / {
			#用于指定访问根目录时,访问的虚拟主机的web目录
            root   html9090;
			#在不指定访问具体的资源时,默认的展示资源的列表
            index  index.html index.htm;
        }
     
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        
    }
	
	#基于域名的虚拟主机配置方式 ,修改server_name
	server {
          listen       80;
		#为虚拟机指定域名
        server_name  www.chy.com;
	
		#主要配置路由访问信息
        location / {
			#用于指定访问根目录时,访问的虚拟主机的web目录
            root   html-chy;
			#在不指定访问具体的资源时,默认的展示资源的列表
            index  index.html index.htm;
			
			
        }
		error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
			}
		}
		server {
          listen       80;
		#为虚拟机指定域名
        server_name  www.timepause.cn;
	
		#主要配置路由访问信息
        location / {
			#用于指定访问根目录时,访问的虚拟主机的web目录
            root   html-timepause;
			#在不指定访问具体的资源时,默认的展示资源的列表
            index  index.html index.htm;
			
			
        }
		error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
			}
		}

}

3、nginx.conf的结构介绍

4. 如何在Linux中绑定多IP?

  1. 将原有的ip改为静态ip
  2. 复制一份ifconfig-eth0,改名为ifconfig-eth0:1
  3. 修改eth0:1中的IP地址,删除uuid
  4. 重启系统

Nginx中配置服务的反向代理

需求

安装两个 tomcat 服务,通过 nginx 反向代理。 本案例中使用两台虚拟机演示。 tomcat 安装到 192.168.179.128 环境中。 端口为 8080 与 9090 Nginx 安装在 192.168.179.128 环境中 ,需要有jdk的支持!!! 当访问第一个域名时,跳转到第一个tomcat 当访问第二个域名时,跳转到第二个tomcat

安装环境

安装tomcat

n表示用nginx做反向代理

配置tomcat

1、修改第二个tomcat的所有端口(启动、关闭、运行),使两个tomcat能够同时运行

2、修改两个tomcat的访问页面,使其具有辨识度

3、修改nginx.conf配置文件

测试

在反向代理中配置负载均衡

负载均衡,英文名称为 Load Balance,其意思就是分摊到多个操作单元上进行执行,例如 Web 服务器、FTP 服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

步骤

  1. 修改nginx配置文件
  1. 修改host文件

3 .重启nginx ,测试

轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后 端服务器 down 掉,能自动剔除

指定权重

指定轮询几率,weight 和访问比率成正比,用于后端服务器 性能不均的情况。

upstream backserver {  
server 192.168.179.128 weight=10;  
server 192.168.179.128 weight=10;  
} 

IP 绑定 ip_hash

每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访 问一个后端服务器,可以解决 session 的问题。 upstream backserver { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; }

需求

nginx 作为负载均衡服务器,用户请求先到达 nginx,再由 nginx 根据负载配置 将请求转发至 tomcat 服务器。 nginx 负载均衡服务器:192.168.179.131 tomcat1 服务器:192.168.179.128:8080 tomcat2 服务器:192.168.179.128:9090 访问配置好的 www.chy.com,并刷新,随机出现这两个服务器的欢迎界面

http协议代理:

由于 ftp 服务器是基于 ftp 协议处理的。那么现在我想在外部访问该图片,是没有办法访问的。他是不能处理 http 协议的。所以我们需要拥有一个能够处理 http 协议代理服务器。 其实就是使用了 Nginx 的虚拟主机的方式。

需求

使用 Nginx 的基于域名的虚拟主机的方式来完成在 KindEditor 中添加图片时的图片回 显处理。 nginx:192.168.179.131 VSFTPD:192.168.179.131 注意:nginx 与 VSFTPD 必须安装到同一个环境中。

步骤

1、在本机配置相关域名的映射,以便访问该域名时,自动跳转到虚拟机上相应的地址

2、在192.168.179.131的虚拟机上的nginx中配置nginx.conf

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; 
    sendfile        on;    
	keepalive_timeout  65; 
	
	#http域名解析
    server {         
	listen       80; 
		#为虚拟机指定 IP 或者是域名        
		server_name  img.chy.com; 
	 
		 #主要配置路由访问信息         
		 location / {      
		 #用于指定访问根目录时,访问虚拟主机的 web 目录           
		 root  /home/ftpuser/; 
	 
		 #在不指定访问具体资源时,默认的展示资源的列表             
		 index  index.html index.htm;   
		 
		 } 
	 
		 error_page   500 502 503 504  /50x.html;      
		 location = /50x.html { 
		 root   html;        	
		} 
 
    } 
}

3、在/home/ftpuser/2019/07/22中上传一张图片(2019/07/22目录自己创建的),可以看到,通过域名+目录名即可完成图片的访问,大功告成!!!

  1. nginx软件分享 链接:https://pan.baidu.com/s/1-0pgrJ1GQ3T1fkNqZ5CYGw 提取码:wpiy

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 高并发技术

    我国是人口大国同时也是数据大国, 由数据的量(数以亿计)变产生了质变 , 我们步入了大数据时代. 而大数据也带来的高并发的问题. 解决高并发问题是大数据时代的...

    时间静止不是简史
  • Tomcat的源码分析

    总结 : 由上面摘抄的主要源码可知 ,在catalina.bat 启动时 ,主要是加载了一个叫bootstrap.jar 的jar包 . 在加载这个jar...

    时间静止不是简史
  • Redis在分布式项目中的应用

    Redis作为一个开源的使用 ANSIC 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库. 主要用于在大型分布式项目中对数据库查询...

    时间静止不是简史
  • 07 . Nginx常用模块及案例

    ngx_http_limit_conn_module (nginx的连接频率限制模块可以根据定义的key来限制每个键值的连接数.)

    常见_youmen
  • docker(nginx和tomcat)

    崔笑颜
  • Linux 搭建Nginx+uwsgi+Django环境

    然后在项目文件夹根目录执行下面命令,然后就可以在项目根目录下面找到后端的样式资源(static文件夹下)了 python3 manage.py colle...

    lin_zone
  • LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡

      首先声明下,由于这两天找资料,看了不少博客 ,但是出于不细心,参考者的博客地址没有记录下来,所有文中要是出现了与大家博客相同的地方,那么请大家在评论区说明并...

  • Nginx添加rtmp模块搭建rtmp推流服务器

    剑行者
  • 主成分分析降维(MNIST数据集)

    今天看了用主成分分析简化数据,就顺便用MNIST数据集做了下实验,想直观地看一下效果,并通过完成这个小demo深入理解下原理。 我发现“是什么、能做什么、怎么用...

    用户1332428
  • Nginx如何支持HTTPS?手把手教贼简单!

    macrozheng

扫码关注云+社区

领取腾讯云代金券