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

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
在这里插入图片描述
2.修改host,解析域名到ip地址
linux,mac中配置:sudo vim /etc/hosts 添加 192.168.5.228 www.qixing.test
windows中配置:一般是在C:\Windows\System32\drivers\etc目录下,添加ip和域名对应信息,如下图:
在这里插入图片描述
访问测试:
在这里插入图片描述
3.多端口配置:
编辑qixing.conf,增加listen 8888,重载后即可通过多端口访问:
sudo vim qixing.conf
sudo service nginx reload
在这里插入图片描述
访问测试:
在这里插入图片描述
4.多域名配置:
编辑qixing.conf,增加server_name www.qixing.com,重载后即可通过多域名访问:
sudo vim qixing.conf
sudo service nginx reload
注意:新域名需要修改host,解析域名到ip地址,可参上面考第2小节
在这里插入图片描述
也可以写在一行,以空格分隔开
在这里插入图片描述
访问测试:
在这里插入图片描述
访问测试:
在这里插入图片描述
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;
    }
}

在这里插入图片描述

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设置

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

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中
在这里插入图片描述
在这里插入图片描述

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;
    }
}

配置图片:
在这里插入图片描述
测试:可以看到我们访问www.qixing.test(172.17.5.228)服务器,其实是访问的是229服务
在这里插入图片描述

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:
在这里插入图片描述
指定权重weight:
在这里插入图片描述
测试:1.没有指定权重,所以会默认轮询规则,轮流访问229和230服务,概率各为1/2
2.指定权重,所以访问229的概率为3/5,访问230的概率为2/5
在这里插入图片描述
在这里插入图片描述

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

注意:调试完成后需要把调试代码删掉
在这里插入图片描述
测试:访问会直接返回配置中定义的数据
在这里插入图片描述
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错误日志可看出哪个文件错了

发布了74 篇原创文章 · 获赞 53 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/m0_37679452/article/details/102910679