Nginx使用场景及相关配置

本文详细介绍了Nginx的配置结构、常用命令及其用法,包括配置文件的全局块、events块、http块和server块。此外,还深入探讨了Nginx作为HTTP服务器、反向代理、负载均衡和虚拟主机的使用场景,提供了具体的配置示例。同时,讲解了如何验证配置、查看版本信息、启动、停止和重载配置文件的命令。最后,提到了Nginx的stream模块用于socket代理,并展示了安装和配置方法。
摘要由CSDN通过智能技术生成

https://blog.csdn.net/qq_26012495/article/details/98367624
proxy_pass的url加不加“/”的问题:
https://www.cnblogs.com/kevingrace/p/6566119.html
正向代理:
https://blog.51cto.com/u_7603402/2422469
https://blog.csdn.net/k417699481/article/details/115672191?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.highlightwordscore&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.highlightwordscore
常用命令:
https://blog.csdn.net/cckavin/article/details/103739054
平滑安装nginx:
https://www.cnblogs.com/crysmile/p/9565048.html

1 基本配置介绍

1.1 配置文件结构

nginx的主配置文件是安装目录下conf文件夹下的nginx.conf,该配置文件的结构

...       // 全局块
 
events {    // events块
	...
}
 
http {    // http块
	...       // http全局块
 
	server {    // server块
        ...       // server全局块
 
		location [Pattern] {    // location块
			...
		}
		location [Pattern] {
			...
		}
	}
	server {
        ...
 
		location [Pattern] {
			...
		}
		location [Pattern] {
			...
		}
	}
	...
}

1.2 各配置块说明

结构名称说明
全局块主要包括配置运行Nginx服务器的用户、允许生成的worker process数、日志存放路径、配置文件引入等;worker process值越大,支持的并发量越高。
events块设置每个work process最大连接数等,该部分主要影响Nginx性能。
http块包含http全局块、server块、server全局块、location块
– http全局块包含日志定义、超时时间等
– server块每个server块相当于一个虚拟主机
– server全局块配置本虚拟机监听配置
– location块基于Nginx接收到的请求,对其进行匹配处理、地址定向、数据缓存等

2 nginx常用命令

2.1常用命令

以下命令需要在nginx的安装目录的sbin文件夹下执行。

命令说明
验证配置是否正确./nginx -t
查看Nginx的详细的版本号./nginx -V 或 ./nginx -v
查看配置编译阶段的信息./nginx -V
启动命令./nginx
快速停止或关闭./nginx -s stop
正常停止或关闭./nginx -s quit
配置文件修改重装载命令./nginx -s reload

2.2 详解及示例

2.2.1 验证配置是否正确

在启动Nginx前可以使用 -t参数测试配置文件(nginx.conf)是否正确。

[root@test ~]# cd /usr/local/nginx/sbin/
[root@test sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@test sbin]#

使用 -q 参数可以不输出 error 级别以下的信息。

./nginx -t -q

2.2.2 查看Nginx的详细的版本号

[root@test sbin]# cd /usr/local/nginx/sbin/
[root@test sbin]# ./nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) 
configure arguments: --prefix=/usr/local/nginx
[root@test sbin]# ./nginx -v
nginx version: nginx/1.18.0
[root@test sbin]#

2.2.3 查看配置编译阶段的信息

[root@test sbin]# cd /usr/local/nginx/sbin/
[root@test sbin]# ./nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) 
configure arguments: --prefix=/usr/local/nginx
[root@test sbin]#

2.2.4 启动

[root@test sbin]# cd /usr/local/nginx/sbin/
[root@test sbin]# ./nginx
[root@test sbin]#

2.2.5 快速停止

-s stop命令会告诉Nginx向正在运行的Nginx master进程发送TERM信号量来快速的关闭Nginx服务。

[root@test sbin]# cd /usr/local/nginx/sbin/
[root@test sbin]# ./nginx -s stop
[root@test sbin]#

2.2.6 正常停止

-s quit命令会告诉Nginx正常处理完所有任务(关闭监听接口,停止接收新的链接,把当前的所有连接全部处理完)再停止进程。

[root@test sbin]# cd /usr/local/nginx/sbin/
[root@test sbin]# ./nginx -s quit
[root@test sbin]#

2.2.7 重载配置文件

-s reload参数会重新加载nginx.conf文件——先检查配置是否有误,如果没有就使用 quit命令停止服务,然后再重新启动。

[root@test sbin]# cd /usr/local/nginx/sbin/
[root@test sbin]# ./nginx -s reload
[root@test sbin]#

3 使用场景

3.1 HTTP服务器

3.1.1 功能

将服务器上的静态资源如html、css、js、jpg等,通过HTTP协议返回给浏览器客户端。可通过此方式部署前端项目。

3.1.2 配置方式

将静态资源文件上传到服务器,使用root指令或者alias指令指向文件所在位置;注意root指令于alias指令的区别:

对比项rootalias
语法root pathalias path
配置段http、server、location、iflocation
默认值root html
处理结果root值 + location值alias值
必须“/”结束

3.1.3 示例

访问地址前缀为:http://test.com/
实际访问的服务器地址:/opt/h5/

server {
        listen       8080(端口号);
        server_name  test.com(ip或者域名);
        
        location / {
            root /opt/h5;
        }
 }

访问地址前缀为:http://test.com/picture/
实际访问的服务器地址:/opt/h5/picture/

server {
        listen       8080(端口号);
        server_name  test.com(ip或者域名);
        
        location /picture {
            root /opt/h5/;
        }
 }

访问地址前缀为:http://test.com/picture/
实际访问的服务器地址:/opt/h5/picture/

server {
        listen       8080(端口号);
        server_name  test.com(ip或者域名);
        
        location /picture {
            alias /opt/h5/picture/;
        }
 }

3.2 反向代理

3.2.1 功能

在项目中,往往需要代理服务器接收外部网络的访问请求,将请求转发给内部服务器,并接收到的内部服务器返回的结果返回给请求的客户端。代理服务器和内部服务所在服务器可以是不同的服务器,也可以是同一个服务器,不同的端口。

3.2.2 配置方式

通过proxy_pass指令指向代理服务的地址,注意通过location来区分不同的服务。
注意:配置proxy_pass时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走。

server {
        listen       8080(端口号);
        server_name  test.com(ip或者域名);
        
        location /test1 {
            proxy_pass http://192.168.3.100:8081/;
        }
}

3.2.3 示例

server {
        listen       8080(端口号);
        server_name  test.com(ip或者域名);
        
        # 请求地址 http://test.com/test1/
        # 实际访问地址 http://192.168.3.100:8081/
        location /test1 {
            proxy_pass http://192.168.3.100:8081/;
        }
        
        # 请求地址 http://test.com/test2/
        # 实际访问地址 http://192.168.3.100:8082/
        location /test2 {
            proxy_pass http://192.168.3.100:8082/;
        }
        
        # 请求地址 http://test.com/test3/
        # 实际访问地址 http://192.168.3.101:8080/
        location /test3 {
            proxy_pass http://192.168.3.101:8080/;
        }
        
        # 请求地址 http://test.com/test3/
        # 实际访问地址 http://192.168.3.101:8080/test4/
        location /test4 {
            proxy_pass http://192.168.3.101:8082;
        }
 }

3.3 负载均衡

3.3.1 功能

将访问的请求分摊到多个节点服务器上去执行。

3.3.2 配置方式

通过upstream块配置负载的服务器地址信息。
Nginx目前支持自带3种负载均衡策略,还有2种常用的第三方策略,使用第三方策略需要安装第三方模块。

http {
    server {
        listen       80;
        server_name  test.com;
        
	    location /test {
	        # 下面配置的test与upstream后面的值对应,实际访问的服务地址为upstream中server的地址
            proxy_pass http://test/;
        }
    }
    
    upstream test {
         server 192.168.3.100:8080 weight=1;
         server 192.168.3.101:8080 weight=1;
    }
}

3.3.3 示例

http {
    server {
        listen       80;
        server_name  test.com;
        
	    location /test {
            proxy_pass http://test/;
        }
        location /test2 {
            proxy_pass http://test2/;
        }
    }
    
    # 轮询(默认)
    upstream test {
         server 192.168.3.100:8080;
         server 192.168.3.101:8080;
    }
    # 权重 (权重分配的不同,分摊的请求比重就不同)
    upstream test2 {
         server 192.168.3.100:8082 weight=1;
         server 192.168.3.101:8082 weight=1;
    }

    # 下边三种作为了解
    #ip_hash 
    upstream test {
         ip_hash;
         server 192.168.3.100:8080;
         server 192.168.3.101:8080;
    }
	#fair(第三方)
	upstream test {
	    fair;
	    server 192.168.3.100:8080;
        server 192.168.3.101:8080;
	}
	#url_hash(第三方)
	upstream test {
	    hash $request_uri;
	    hash_method crc32;
	    server 192.168.3.100:8080;
        server 192.168.3.101:8080;
	}

3.4 正向代理

3.4.1 功能

客户端(PC)无法直接通过互联网或者内部局域网直接访问X资源(服务器),但是客户端能够直接访问一个代理服务器,而这个代理服务器能够访问到PC访问不了的X资源,于是我们先在PC上配置代理服务器的地址,PC把请求发送给代理服务器,让代理服务器去访问X资源,代理访问了X资源返回给PC,从而解决了无法访问的问题。

3.4.2 配置方式

server {
        listen 8088;
		resolver 114.114.114.114;  #增加dns解析
        location / {
            proxy_pass http://$http_host$request_uri;
        }
    }

3.5 虚拟主机

3.5.1 功能

虚拟主机就是把一台物理服务器划分成多个”虚拟“的服务器,进而配置多个网站,这样可以实现只在一台服务器上安装一个nginx,达到运行多个网站的效果。
nginx下,一个server标签就是一个虚拟主机。

3.5.2 配置方式

3.5.2.1 基于端口的虚拟主机

多个虚拟主机的区分方式:端口号
访问方式:域名+端口号 或 ip地址+端口号

    # 第一个虚拟主机
    server {
        listen       80;
        server_name  test.com;
        location / {
            root /home/test1;
        }
    }
    # 第二个虚拟主机
    server {
        listen       8080;
        server_name  test.com;
        location / {
            root /home/test2;
        }
    }
3.5.2.2 基于域名的虚拟主机

多个虚拟主机的区分方式:域名
访问方式:域名

    # 第一个虚拟主机
    server {
        listen       80;
        server_name  test.one.com;
        location / {
            root /home/test1;
        }
    }
    # 第二个虚拟主机
    server {
        listen       80;
        server_name  test.two.com;
        location / {
            root /home/test2;
        }
    }

3.6 socket代理

3.6.1 功能介绍及平滑安装stream模块

该功能要使用nginx的ngx_stream_core_module模块,但是该模块在安装时不是默认构建的,需要在编译安装执行 ./configure时加上参数–with-stream。

3.6.1.1 查看是否安装stream模块

使用命令./nginx -V查看,如果在configure arguments后面没有出现–with-stream则说明没有安装此模块。

[root@test sbin]# cd /usr/local/nginx/sbin/
[root@test sbin]# ./nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) 
configure arguments: --prefix=/usr/local/nginx
[root@test sbin]#
3.6.1.2 平滑安装stream模块
# 找到nginx源码目录,如此处nginx源码目录为:/home/nginx/nginx-1.18.0,即为编译命令执行目录
cd /home/nginx/nginx-1.18.0
# 执行编译命令
./configure --prefix=/usr/local/nginx --with-stream
# 执行make,此处一定不能使用make install命令,执行该命令会将原有nginx目录进行覆盖
make
# 关掉nginx
cd /usr/local/nginx/sbin/
./nginx -s stop
# 备份原有nginx二进制文件。
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-no-strem
# 复制新编译好的nginx二进制文件。从此处nginx源码目录为:/usr/local/nginx-1.13.4。即为编译命令执行目录。
cp /home/nginx/nginx-1.18.0/objs/nginx /usr/local/nginx/sbin/nginx
# 重新启动服务
cd /usr/local/nginx/sbin/
./nginx
# 可以通过./nginx -V命令查看以下模块是否安装成功

3.6.2 配置方式

在events和http同级除,添加stream模块。

stream {
   # 日志格式
   log_format steamlog '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
    # 日志文件路径配置
    access_log  logs/stream-access.log steamlog;
    # 错误日志路径配置
    error_log  logs/stream-error.log;

    server {
        # 监听端口
        listen       46000;
        # socket转发地址
        proxy_pass   172.17.21.140:46000;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值