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(成功),不执行下面的代码,内容为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错误日志可看出哪个文件错了
上一篇: 炉石传说