欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能

程序员文章站 2022-07-12 20:53:08
...

Linux环境下配置Nginx

前言:我使用的是虚拟机,linux版本为linux7。

1.配置虚拟主机conf文件
进入到conf.d中,复制一份default.conf到qixing.conf,修改qixing.conf配置后可直接使用(因为nginx.conf文件中会默认加载conf.d中以conf结尾的文件)
进入conf.d:cd /etc/nginx/conf.d
复制:sudo cp default.conf qixing.conf
编辑qixing.conf,内容如下:

server {
    listen       80; #监听80端口
    server_name  www.qixing.test; #域名www.qixing.test
    root /data/www; #根目录 /data/www
    index index.html index.htm; #默认寻找的文件
}

重载nginx:sudo service nginx reload
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能
2.修改host,解析域名到ip地址
linux,mac中配置:sudo vim /etc/hosts 添加 192.168.5.228 www.qixing.test
windows中配置:一般是在C:\Windows\System32\drivers\etc目录下,添加ip和域名对应信息,如下图:
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能
访问测试:
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能
3.多端口配置:
编辑qixing.conf,增加listen 8888,重载后即可通过多端口访问:
sudo vim qixing.conf
sudo service nginx reload
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能
访问测试:
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能
4.多域名配置:
编辑qixing.conf,增加server_name www.qixing.com,重载后即可通过多域名访问:
sudo vim qixing.conf
sudo service nginx reload
注意:新域名需要修改host,解析域名到ip地址,可参上面考第2小节
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能
也可以写在一行,以空格分隔开
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能
访问测试:
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能
访问测试:
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能
5.配置伪静态:
编辑qixing.conf:sudo vim qixing.conf
添加:locaton / {rewrite ^(.).htm$ /index.html;}
规则解释:任意开头并且以.htm结尾的文件都访问index.html
匹配规则为正则表达式,^为以什么开头,$为以什么结尾,(.
)为任意开头,.htm为以.htm结尾(\为转义字符,.需转义)

server {
    listen       80;
    server_name  www.qixing.test;
    root /data/www;
    index index.html index.htm;
    location / {
        rewrite ^(.*)\.htm$ /index.html;
    }
}

Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能

6.自定义日志格式
进入nginx文件夹:cd /etc/nginx
编辑:sudo vim nginx.conf
入下图1 我们可以看到log_format main就是nginx官方为我们定义的默认格式,access_log为以main格式显示access.log
所以再写一个log_format,然后把新写的格式名替换掉main就好了,如。
再写一个log_format:log_fromat qixing ‘$remote_addr $remote_user’;
修改access_log:access_log /var/log/nginx/access.log qixing;
启动服务并从页面访问后,可查看日志:tail -f /var/log/nginx/access.log

log_format变量意义:
    $remote_addr  #访问网站的客户端地址
    $remote_user  #远程客户端用户名
    $time_local  #访问时间与时区
    $request  #用户的http请求信息
    $status  #http状态码请求返回的状态码,例如:200、404、500等
    $body_bytes_sent  #服务器发送给客户端的响应body字节数
    $http_referer  #此次请求是从哪个连接访问过来的,可以根据该参数进行防盗链设置。
    $http_user_agent  #客户端访问信息,例如:浏览器、手机客户端等
    $http_x_forwarded_for  #当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的前提是代理服务器也要进行相关的x_forwarded_for设置

Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能

7.增加虚拟主机的访问日志,并自定义日志格式(如果虚拟主机比较多,各自生成各自的日志比好,易于查看,占内存小)
编辑nginx.conf,增加log_format:sudo vim nginx.conf
进入到conf.d中:cd /etc/nginx/conf.d
编辑qixing.conf:sudo vim qixing.conf

#nginx.conf:
log_format  qixing  '$remote_addr - $remote_user [$time_local] "$request" ';
#qixing.conf:
access_log  /var/log/nginx/access_qixing.log  qixing;

保存重载后,以后的日志将会以qixing的格式存在access_qixing.log中
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能

8.反向代理
什么是反向代理:反向代理是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
进一步解释:我们将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

进入到conf.d中:cd /etc/nginx/conf.d
编辑qixing.conf:sudo vim qixing.conf
#配置一个代理即真实服务器(请求转发到服务),注意:必须要指定端口

upstream qixing_hosts {
   server 172.17.5.229:80;
}

配置解释:

#当被代理的服务器(229,230)配置了只解析指定域名,不解析ip地址的规则,则需要配置proxy_set_header
proxy_set_header www.qixing.test;
#被代理的服务器的ip(可以有多个被代理的服务器)
proxy_pass http://qixing_hosts;

配置代码:

方式一(推荐此写法):
upstream qixing_hosts {
   server 172.17.5.229:80;
}
server {
    listen       80;
    server_name  www.qixing.test;
    root /data/www;
    index index.html index.htm;
    location / {
        #rewrite ^(.*)\.htm$ /index.html;
        proxy_set_header Host www.qixing2.com;
        proxy_pass http://qixing_hosts;
    }
}
方式二(直接给出地址):
server {
    listen       80;
    server_name  www.qixing.test;
    root /data/www;
    index index.html index.htm;
    location / {
        #rewrite ^(.*)\.htm$ /index.html;
        proxy_set_header Host www.qixing2.com;
        proxy_pass http://172.17.5.229:80;
    }
}

配置图片:
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能
测试:可以看到我们访问www.qixing.test(172.17.5.228)服务器,其实是访问的是229服务
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能

9.负载均衡
进入到conf.d中:cd /etc/nginx/conf.d
编辑qixing.conf:sudo vim qixing.conf

#配置多个被代理的服务器地址,不指定权重weight,则默认轮询规则
upstream qixing_hosts{
    server 172.17.5.229:80;
    server 172.17.5.230:80;
}
#配置多个被代理的服务器地址,指定权重weight,则访问229权重为3/(3+2)
upstream qixing_hosts{
     server 172.17.5.229:80 weight=3;
    server 172.17.5.230:80 weight=2;
} 

不指定权重weight:
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能
指定权重weight:
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能
测试:1.没有指定权重,所以会默认轮询规则,轮流访问229和230服务,概率各为1/2
2.指定权重,所以访问229的概率为3/5,访问230的概率为2/5
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能

10.日志调试功能
当遇到问题时,可以使用调试功能来更好的捕捉问题原因
#http头部信息,Content-Type “text/plain;charset=utf-8"为返回的内容格式
add_header Content-Type “text/plain;charset=utf-8”;
直接返回200(成功),不执行下面的代码,内容为httphost访ipnginxreturn200"http_host(访问的域名或ip),内容自行定义,具体查看nginx内置变量 return 200 "http_host”;

注意:调试完成后需要把调试代码删掉
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能
测试:访问会直接返回配置中定义的数据
Linux环境下Nginx配置虚拟主机、反向代理、负载均衡、多域名、伪静态等功能
nginx常用内置变量请自行搜索。

11.nginx启动,重启失败等问题的一般解决办法
使用下面命令可查看出部分错误原因:
查看nginx状态:systemctl status nginx.service
查看系统日志:sudo journalctl -xe
如果看不出来,可进一步查看nginx错误日志(基本就确定了错误原因):
进入到nginx日志目录:cd /var/log/nginx/
查看error.log:sudo tail -f error.log
举两个例子:
1.可能是端口已经被占用,可通过 lsof -i:端口号 ,查到有占用时可删除进程(kill -9 PID)
例:lsof -i:80
kill -9 26993
如果lsof不能使用,则需要下载lsof:yum install -y lsof
2.nginx中的文件编写错误,查看nginx错误日志可看出哪个文件错了

相关标签: linux nginx