Nginx基本使用
  2nTRIltqfA7y 2023年12月23日 14 0

一、Nginx简介

Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev(伊戈尔·西索夫)所开发,供俄国大型的入口网站及搜索引擎Rambler(漫步者)(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:新浪、网易、 腾讯等。

1. 优点

  1. 占用内存少,并发能力强
  2. Nginx专为性能优化而开发, 在高并发的情况下,能够支持高达 50,000 个并发连接数的响应.
  3. Nginx支持热部署, 可以在不间断服务的情况下,对软件版本进行升级.

2. 应用场景:

  1. http服务器: Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
  2. 虚拟主机: 可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
  3. 反向代理,负载均衡 : 当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。

二、Nginx安装

1、 官网下载nginx

网址:http://nginx.org/

下载源码压缩包

2、准备安装环境

1. 安装gcc环境

yum install gcc-c++

2. 安装PCRE

yum install -y pcre pcre-devel

nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库

3. 安装zlib

yum install -y zlib zlib-devel

nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。

4. 安装OpenSSL

yum install -y openssl openssl-devel

OpenSSL 是一个强大的安全套接字层密码库,nginx不仅支持http协议,还支持https,所以需要在linux安装openssl库。

3、安装Nginx

1. 解压Nginx

tar -xvf nginx-1.17.8.tar

2. 生成Makefile文件

进入解压后的文件夹,执行 configure 命令

./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

3. 创建零时文件目录

mkdir /var/temp/nginx/client -p

4. 编译

make

5. 安装

make install

三、Nginx基本使用

进入 prefix=/usr/local/nginx 指定的安装目录,其中有三个文件夹:

html目录:存放静态资源,当nginx被用作静态资源服务器时,要将html的资源放在这里,然后就可以被访问到了。

conf目录:存放各种配置文件,

sbin目录:存放可执行文件

# 1、启动 Nginx ,进入sbin目录,执行:
./nginx
# 2、查看是否启动成功 【有两个Nginx进程就对了】
ps aux | grep nginx
# 3、关闭
./nginx -s stop
# 4、重新加载配置文件
./nginx -s reload

四、Nginx配置

4.1 配置多个虚拟主机

Nginx的虚拟主机类似于Tomcat 的web应用,Nginx可以配置多个虚拟主机,Tomcat通过应用名区分不同的应用,Nginx通过端口号和域名来决定访问的是哪个虚拟主机。

在conf目录下有一个nginx.conf配置文件:

worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  www.mochen2.com;

        location / {
            root   html2;
            index  index.html index.htm;
        }

    }
	
	server {
        listen       80;
        server_name  www.mochen.com;

        location / {
            root   html;
            index  index.html index.htm;
        }

    }

}

在http中可以配置多个server,一个server就代表一个虚拟主机,

listen指定该虚拟主机对应的端口号。

server_name则指定虚拟主机对应的域名。

当有请求时,首先根据请求的端口号判断访问哪个虚拟主机,若找到多个对应的虚拟主机,根据域名进行判断。

server_name可以设置:

  1. 多个域名并用空格分开。
  2. 以 \* 通配符开头的域名
  3. 以 \* 通配符结尾的域名
  4. 正则表达式

匹配顺序也是如上所示,首先用完整域名进行匹配,若无法匹配成功,则与 以 \* 开头的匹配,以此类推,匹配到一个就不再进行匹配。

location

location用于匹配请求的资源路径【也就是域名后边的URI】,如这里的 / 就表示匹配所有路径,后边大括号里的root用于指定资源的根目录,这里的html【默认值】是相对路径,指的是安装目录下的html文件夹。也可以使用绝对路径将此虚拟主机的更目录指向服务器的任意位置【当然也要nginx有权限访问】,如下例:

location /kk {
    root   /test/html;
	index  index.html index.htm;
}

这里的 /kk 表示此虚拟主机可以匹配 如:www.mochen.com/kk/xx.html 之类的请求,请求访问的资源就是 /test/html/kk/xx.html。

index类似于Tomcat中的welcome-file-list用于指定欢迎页,一般是相对路径,如这里代表访问www.mochen.com/kk时默认访问 /test/html/kk/index.html 文件。

location之后可以更多种路径匹配符,/ 表示匹配一切请求,同样优先级也是最低的。

4.2 反向代理

1、何为反向代理

代理很好理解,就是代替某人做某些事情。那反向又是什么意思呢?反向与正向相对,因为反向代理与正向代理正好相反,就是一个名称而已。

正向代理:由代理服务器代理客户端访问互联网资源。如VPN就是正向代理。反向代理:由代理服务器代理服务器,向客户端提供服务。

Nginx基本使用_服务器

Nginx基本使用_html_02

Nginx就可以充当着个反向代理服务器,由它接受请求并按一定的规则转发到后台服务器。

2、配置反向代理服务器

upstream ssm{
	server 127.0.0.1:8082;
}

server {
	listen       80;
	server_name  www.mochen.com;

	location /ssm-web {
		proxy_pass http://ssm;
	}
	
	location / {
		root html;
		index edu-boss/index.html;
	}
}

在location中通过proxy_pass进行请求转发设置。

在upstream中通过server指定被代理服务器访问地址。

3、负载均衡

当系统面临大量用户访问,负载过高的时候,通常会使用增加服务器数量来进行横向扩展, 负载均衡主要是为了分担访问量,将请求合理分发给不同的服务器, 避免临时的网络堵塞。

负载均衡策略:

*轮询:*默认策略, 每个请求按照时间顺序逐一分配到不同的服务器,如果某一个服务器下线,能自动剔除。

配置方式:【无需配置】

upstream lagouServer{
	# 用server定义 HTTP地址
	server 192.168.52.100:8081;
	server 192.168.52.100:8082;
}

*weight:*可以根据服务器的实际情况调整服务器权重。权重越高分配的请求越多,权重越低,请求越少。默认是都是1.

#负载均衡
upstream lagouServer{
	# 用server定义 HTTP地址
	server 192.168.52.100:8081 weight=1;
	server 192.168.52.100:8082 weight=10;
}

*ip_hash:*保证每个访客固定访问一个后端服务器,

#负载均衡
upstream lagouServer{
	ip_hash;
	# 用server定义 HTTP地址
	server 192.168.52.100:8081 weight=1;
	server 192.168.52.100:8082 weight=10;
}

*least_conn:*把请求转发给连接数较少的后端服务器

Nginx服务器之负载均衡策略(6种)


maven多环境配置

在不同的环境中部署就要手动修改为对应环境的配置,这样太麻烦了以及这样也会很容易出错。 多环境配置就是通过maven的相关配置来在打包时指定各个环境对应配置文件。

1、为开发环境和生产环境各写一个配置文件,在主配置文件需要的地方引入。

Nginx基本使用_nginx_03

2、在pom文件中进行配置

<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <!-- 测试环境 -->
            <env>development</env>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <!-- 正式环境 -->
            <env>product</env>
        </properties>
    </profile>
</profiles>

<build>
    <finalName>web</finalName>
    <filters>
        <filter>src/main/resources/filter/${env}.properties</filter>
    </filters>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>filter/*.properties</exclude>
            </excludes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

profile的id定义环境标识,在编译时通过指定该标识表名使用什么环境进行编译。

在properties中指定环境变量env【代表各环境配置文件名】,在下方的filter中使用该变量选用对应环境的配置文件。

activation配置默认使用哪个环境。

build中的resource用于配置打包时的资源,默认就是src/main/resources下的全部文件,excludes表示那些东西不需要出现在最终的jar或war包中。

filtering表示这些资源是否需要引入上方filter配置的文件中的数据,也就是,只有设置了true,在jdbc.properties中 \${xxx} 才能生效。

3、使用mvn打包

命令方式:

打本地包 mvn -Pdev install 或者mvn install(因为本例activeByDefault配的为true)
打产品包 mvn -Pprod install

idea中使用MVN:

Nginx基本使用_html_04

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月23日 0

暂无评论

2nTRIltqfA7y
作者其他文章 更多