Nginx配置

     阅读:50

一、nginx常用配置命令

配置命令路径

/usr/local/nginx/sbin

查看nginx版本

./nginx -v

停止nginx服务

./nginx -s stop

启动nginx服务

./nginx

重新加载nginx,适用于当nginx.conf配置文件修改后,使用下面命令可以使得配置文件生效

./nginx -s reload

查看nginx服务是否运行

netstat -ntlp

在这里插入图片描述

二、nginx配置文件

由三部分组成

(一)、第一部分:全局块

nginx服务器全局生效的配置命令

worker_processes  1;   # 服务器并发处理能力,值越大并发能力越强(受自身配置限制)

(二)、第二部分:events块

影响nginx和用户网络的连接

worker_connections  1024;  #最大连接数1024个,需灵活配置

(三)、第三部分:http块

nginx配置最频繁的部分,比如代理,日志,缓存、第三方模块等等。
需要注意的是http块可以包括http全局块和server块

1、http全局块

包括文件引入、MIME-TYPE定义,日志自定义、连接超时等等

http {
    include       mime.types;      #文件扩展名与文件类型映射表
    default_type  application/octet-stream;  # 访问到未定义的扩展名的时候,就默认为下载该文件

2、server块

与虚拟主机有密切关系,主要是为了节省硬件成本
一个http块可以包含多个server块,而一个server块就等于一个虚拟主机
server块又包含全局server块和location块
全局server块

server {
    listen       8012;       #  目前监听的端口号
    server_name  localhost;  # 主机名称

3、location块

   location / {     #表示默认首页
            root   html;
            index  index.html index.htm;

三、nginx配置反向代理

(一)、预计实现的效果

1、访问URL http://www.giunwr.cn:8012/xxx(不包括下面2种情况) 内部跳转到tomcat服务器8080端口
2、访问http://www.giunwr.cn:8012/8080/xxx 内部跳转到 http://www.giunwr.cn:8080/xxx
3、访问 http://www.giunwr.cn:8012/8081/xxx 内部跳转到 http://www.giunwr.cn:8081/xxx

(二)、前期准备

安装tomcat服务(需要安装2个,一个8080端口,一个8081端口)
下载tomcat,如果链接404,就到官网下再找个

wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.16/bin/apache-tomcat-10.0.16.tar.gz

在这里插入图片描述

安装过程

tar -zxvf  apache-tomcat-10.0.16.tar.gz # 解压
cd apache-tomcat-10.0.16  # 进入tomcat主目录
cd bin  # 进入bin目录
./startup.sh   # 启动tomcat服务

在这里插入图片描述
如果jdk报错
安装命令如下

yum -y install java-1.8.0-openjdk*

在这里插入图片描述

查看tomcat服务是否正常运行

cd logs/        #   进入日志路径
tail -f catalina.out    # 查看 tomcat运行日志

在这里插入图片描述
内网环境测试
可以正常访问
在这里插入图片描述
外网环境测试
emmm, 忘记开防火墙了(放行8080端口)
在这里插入图片描述
放行8080端口后,
访问URL http://www.giunwr.cn:8012
外网测试成功
在这里插入图片描述
修改tomcat默认端口
修改配置文件server.xml

apache-tomcat-10.0.16/conf   # 配置文件路径

在这里插入图片描述
在这里插入图片描述
测试文件的准备
在webapps目录下创建相关的html文件
在这里插入图片描述

(三)、实现反向代理

修改nginx.conf文件

 vim /usr/local/nginx/conf/nginx.conf

其中 ~ 表示正则匹配,优先级高于/
在这里插入图片描述

修改好后记得重新加载配置文件

 ./nginx -s reload

在没有防火墙的情况下访问成功
在这里插入图片描述
关闭防火墙,再进行测试
直接访问8080端口直接报错
在这里插入图片描述
访问8012端口,访问成功,说明这个命令只是在服务器内部做代理,并没有走公网。

proxy_pass http://127.0.0.1:8080

在这里插入图片描述
访问http://www.giunwr.cn:8012/8080/xxx 内部跳转到 http://www.giunwr.cn:8080/xxx

在这里插入图片描述
访问 http://www.giunwr.cn:8012/8081/xxx 内部跳转到 http://www.giunwr.cn:8081/xxx
在这里插入图片描述

四、nginx配置负载均衡

(一)、预期效果

浏览器输入地址http://www.giunwr.cn:8012/test/a.html,大概平均分配到8080和8081端口的tomcat服务器,实现负载均衡。
默认分配测试是轮询

(二)、前期准备

1、准备2台tomcat服务,一个端口为8080,一个端口为8081
2、2台服务器都需要在webapps目录下创建目录test,并在目录test里面创建a.html

(三)、实现功能

修改nginx配置文件
在http块中修改

upstream myserver {
    server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
    listen       8012;
    server_name  localhost;
    location / {
        root   html;
    proxy_pass http://myserver;
        i

在这里插入图片描述
其中upstream在http块里面。myserver为自定义的名称
多访问几次URLhttp://www.giunwr.cn:8012/test/a.html,可以发现几乎是8080的tomcat服务和8081的tomcat服务器之间来回访问

 for ((i=1;i<5;i++));do curl  'http://www.giunwr.cn:8012/test/a.html' ;done

在这里插入图片描述

(四)、负载均衡的分配策略

1、轮询(默认就是这种策略)

按请求时间逐一分配,如果某个服务器挂了,就自动剔除

2、weight(权重)

默认weight值是1,值越大表示权重越大,分配到的几率也就越大
当后端服务器性能不均时候,可以考虑该策略
示例

upstream myserver {
    server 127.0.0.1:8080 weight=5;
	server 127.0.0.1:8081 weight=10;
}

3、ip_hash

每个请求按访问ip的hash结果分配,这样子访客固定访问一个后端服务器,可以解决session问题
举个例子:
A用户固定ip,第一次访问到8080tomcat,那么后面就都是访问到这台机器
示例

upstream myserver {
    ip_hash;
    server 127.0.0.1:8080;
	server 127.0.0.1:8081;
}

4、fair(第三方)

根据后端响应时间来分配请求,需要时间短的优先分配
示例
示例

upstream myserver {
    server 127.0.0.1:8080;
	server 127.0.0.1:8081;
	fair;
}

五、nginx配置动静分离

(一)、预期效果

nginx适合处理静态界面(或者说静态请求),
tomcat适合处理动态界面(或者说动态请求)
动静分离的方式:
1、静态文件一个域名,放在独立的服务器中
2、混合发布,使用nginx分离
通过location指定不同后缀名实现不同的请求和转发。比如expires头部,用于设置过期时间

这边使用第一种方案

(二)、前期准备

准备静态资源
在这里插入图片描述

(三)、配置与实现

配置

location /www/ {
    root   /data/;
    index  index.html index.htm;
}
location /txt/ {
        root   /data/;
        # 列出当前目录的下的资源
        autoindex  on;
    }

在这里插入图片描述
实现效果
在这里插入图片描述
在这里插入图片描述

六、第三方模块stub_status安装

(一)、安装步骤

1、查看是安装该模块(默认不安装)需要进入nginx目录下的sbin目录

[sbin]# ./nginx -V 2>&1|grep stub_status

如果内容为空,即没有安装
3、查看当前已经安装的模块

./nginx -V

在这里插入图片描述在这里插入图片描述

4、重新配置参数
在原来的参数基础上加上 with-http_stub_status_module

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

在这里插入图片描述
5、做好备份

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

6、重新编译
注意只需要编译即可

make

7、替换掉原来的二进制nginx文件
在nginx安装目录下的objs目录里面

cp /root/wr/nginx-1.20.2/objs/nginx /usr/local/nginx/sbin/

(二)、配置与实现

1、配置简单的监控功能
在server块里面写入下面配置命令

location /nginx_status {
        stub_status;
        allow all;
}

在这里插入图片描述
2、重新启动nginx

./nginx -s reload

3、实现效果
访问http://主机地址/nginx_status即可
在这里插入图片描述
参数参考文档
active connections – 活跃的连接数量
server accepts handled requests — 总共处理了xxx个连接 , 成功创建xxx次握手, 总共处理了xxx个请求
reading — 读取客户端的连接数.
writing — 响应数据到客户端的数量
waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接.

(三)、遇到的问题

1、无法替换二进制nginx文件
在这里插入图片描述
原因是nginx服务器还在运行,需要停止nginx

./nginx -s stop

2、重新加载nginx报错
nginx: [error] open() “/usr/local/nginx/logs/nginx.pid” failed (2: No such file or directory)
在这里插入图片描述
解决办法,重新指定一下nginx配置文件

./nginx -c /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

七、nginx压缩模块

在http模块里面开启压缩

gzip  on;    #开启压缩响应
gzip_http_version 1.1;  # 只针对http1.1进行压缩
gzip_comp_level 9;      # 压缩等级为9
gzip_types text/plain;  # 压缩类型为文本

其他具体参数可以参考文档
参考文档:https://www.jb51.net/article/146413.htm