基于nginx部署网站
虚拟主机指的就是一个独立的站点,具有独立的域名,有完整的www服务,例如网站、FTP、邮件等。
Nginx支持多虚拟主机,在一台机器上可以运行完全独立的多个站点。
一、为什么配置虚拟主机
一些草根流量站长,常会搭建个人站点进行资源分享交流,并且可能有多个不同业务的站点,如果每台服务器只运行一个网站,那么将造成资源浪费,成本浪费。
利用虚拟主机的功能,就不用为了运行一个网站而单独配置一个Nginx服务器,或是单独再运行一组Nginx进程。
虚拟主机可以在一台服务器,同一个Nginx进程上运行多个网站。
nginx.conf主配置文件中,最简单的一段虚拟主机配置如下
1.单虚拟主机(静态资源网站)
nginx.conf
原配置文件
[root@test-88 ~]#cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
降低操作权限
[root@test-88 ~]#id www
uid=666(www) gid=666(www) groups=666(www)
[root@test-88 ~]#vim /etc/nginx/nginx.conf
[root@test-88 ~]#cat /etc/nginx/nginx.conf
user www;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
[root@test-88 ~]#
huoying.conf
创建虚拟主机子配置文件
把数据放在/www/huoying/index.html
vim /etc/nginx/conf.d/huoying.conf
server{
listen 80;
# nginx 会匹配http://huoying.linux.cc:80
server_name huoying.linux.cc;
charset utf-8;
location / {
# 根据root参数,填写网页根目录信息
# 表示访问http://huoying.linux.cc:80自动来这个目录下来找数据
root /www/huoying/;
#默认找/www/huoying/ 的名字叫做index.html的文件
index index.html;
}
}
[root@test-88 ~]#vim /etc/nginx/conf.d/huoying.conf
[root@test-88 ~]#cat /etc/nginx/conf.d/huoying.conf
server{
listen 80;
server_name huoying.linux.cc;
charset utf-8;
location / {
root /www/huoying/;
index index.html;
}
}
[root@test-88 ~]#
# 创建网页静态文件,index.html鸣人.jpg
# 部署一个静态网站,最基本的提供,html,jpg,txt等静态数据
# nginx都可以返回,解析请求
[root@test-88 ~]#mkdir -p /www/huoying
[root@test-88 ~]#ls /www
huoying
[root@test-88 ~]#cat > /www/huoying/index.html << EOF
> <meta charset=utf-8>
> 我是火影页面
> EOF
[root@test-88 ~]#cat /www/huoying/index.html
<meta charset=utf-8>
我是火影页面
[root@test-88 ~]#
[root@test-88 ~]#cd /www/huoying
[root@test-88 /www/huoying]#wget -O 鸣人.jpg https://up.deskcity.org/pic_source/c5/8b/4f/c58b4fef1632c6dfa686815adc581c8a.jpg
[root@test-88 /www/huoying]#ls
index.html 鸣人.jpg
echo '佐助打不过鸣人' > 鸣人与佐助的秘密.txt
测试nginx配置文件语法,然后启动
[root@test-88 /www/huoying]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@test-88 /www/huoying]#systemctl restart nginx
根据域名访问虚拟主机
文件在C:\Windows\System32\drivers\etc下
10.0.0.88 huoying.linux.cc
如果有故障
先排查配置文件
静态文件的权限
[root@test-88 /www/huoying]#chown -R www.www /www/
查看域名与配置的是否一致
如果文件类型是其他异常类型,nginx默认不解析,直接下载
nginx识别的文件类型都在这个文件定义好了
[root@test-88 /www/huoying]#cat /etc/nginx/mime.types
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
2.基于IP多虚拟主机
Linux操作系统都能够支持给网卡绑定多个IP地址,可以使得一块网卡上运行多个基于IP的虚拟主机。
添加IP
查看ip
[root@test-88 /]#ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.88 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::20c:29ff:fe8e:3483 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:8e:34:83 txqueuelen 1000 (Ethernet)
RX packets 4202 bytes 2765894 (2.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3268 bytes 1494289 (1.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
添加ip
[root@test-88 /]#ip addr add 10.0.0.89/24 dev eth0
[root@test-88 ~]#ping 10.0.0.89
PING 10.0.0.89 (10.0.0.89) 56(84) bytes of data.
64 bytes from 10.0.0.89: icmp_seq=1 ttl=64 time=0.014 ms
64 bytes from 10.0.0.89: icmp_seq=2 ttl=64 time=0.020 ms
修改conf.d下配置文件,支持多虚拟主机,编写多个server{}标签即可。
[root@test-88 ~]#vim /etc/nginx/conf.d/pord_89.conf
[root@test-88 ~]#cat /etc/nginx/conf.d/pord_89.conf
server{
listen 10.0.0.89:80;
server_name localhost;
charset utf-8;
location / {
root /www/port_89;
index index.html;
}
}
[root@test-88 ~]#
创建测试数据
[root@test-88 ~]#mkdir -p /www/port_89/
[root@test-88 ~]#echo '这是89端口' > /www/port_89/89.txt
[root@test-88 ~]#chown -R www.www /www/
[root@test-88 ~]#ll /www
total 0
drwxr-xr-x 2 www www 78 Mar 31 15:54 huoying
drwxr-xr-x 2 www www 20 Apr 1 10:11 port_89
重启nginx,访问测试
[root@test-88 ~]#systemctl reload nginx
报错查询
目标文件夹下index.html文件没有
[root@test-88 ~]#mv /www/port_89/89.txt /www/port_89/index.html
修正后可正常展示
3.基于域名的多虚拟主机
基于多IP的虚拟主机可能会造成IP地址不足的问题,如果没有特殊需求,更常用的是基于多域名的形式。
只需要你单独配置DNS服务器,将主机名对应到正确的IP地址,修改Nginx配置,可以识别到不同的主机即可,这样就可以使得多个虚拟主机用同一个IP,解决了IP不足的隐患。
修改conf.d下的配置文件
server{
listen 80;
server_name lol.linux.cc;
charset utf-8;
location / {
root /www/lol/;
index index.html;
}
}
server{
listen 80;
server_name dnf.linux.cc;
charset utf-8;
location / {
root /www/dnf/;
index index.html;
}
}
创建测试数据
[root@test-88 ~]#mkdir -p /www/lol
[root@test-88 ~]#mkdir -p /www/dnf
[root@test-88 ~]#echo '这是lol' > /www/lol/index.html
[root@test-88 ~]#echo '这是dnf' > /www/lol/index.html
[root@test-88 ~]#chown -R www.www /www/
解析域名
10.0.0.88 huoying.linux.cc lol.linux.cc dnf.linux.cc
重启nginx,访问测试
systemctl restart nginx
4.基于多端口的虚拟主机
基于端口的配置在生产环境比较少见,用于特殊场景,例如公司内部测试平台网站,使用特殊端口的后台,OA系统、网站后台,CRM后台等。
案例:运行基于80、81端口的虚拟主机运行
修改conf.d下配置文件
[root@test-88 ~]#cat /etc/nginx/conf.d/huoying.conf
server{
listen 80;
server_name huoying.linux.cc;
charset utf-8;
location / {
root /www/huoying/;
index index.html;
}
}
[root@test-88 ~]#vim /etc/nginx/conf.d/huoying.conf
[root@test-88 ~]#cat /etc/nginx/conf.d/huoying.conf
server{
listen 80;
server_name huoying.linux.cc;
charset utf-8;
location / {
root /www/huoying/;
index index.html;
}
}
server{
listen 81;
server_name _;
charset utf-8;
location / {
root /www/haizeiwang/;
index index.html;
}
}
[root@test-88 ~]#
创建测试数据
[root@test-88 ~]#mkdir -p /www/haizeiwang
[root@test-88 ~]#echo '这是81端口' > /www/haizeiwang/index.html
[root@test-88 ~]#chown -R www.www /www/
重启nginx,访问测试
[root@test-88 ~]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@test-88 ~]#systemctl restart nginx
[root@test-88 ~]#netstat -tunlp | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3231nginx: master
tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN 3231nginx: master
[root@test-88 ~]#
5.虚拟主机配置文件优化(include)
如果所有配置都写入一个文件,维护起来很麻烦,修改错了某一个conf文件,导致所有页面都报错,因此拆分为单个的文件更为合适。
二、创建nginx访问日志
日志对于程序员很重要,可用于问题排错,记录程序运行状态,一个好的日志能够给与精确的问题定位。
Nginx日志功能需要在nginx.conf中打开相关指令log_format
,设置日志格式,以及设置日志的存储位置access_log
,指定日志的格式,路径,缓存大小。
1.日志格式字段解释
nginx.conf中有关访客日志定义如下
#a
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
参数解释
$remote_addr :记录访问网站的客户端IP地址
$remote_user :记录远程客户端用户名称
$time_local :记录访问时间与时区
$request :记录用户的 http 请求起始行信息(请求方法,http协议)
$status :记录 http 状态码,即请求返回的状态,例如 200 、404 、502 等
$body_bytes_sent :记录服务器发送给客户端的响应 body 字节数
$http_referer :记录此次请求是从哪个链接访问过来的,可以根据 referer 进行防盗链设置
$http_user_agent :记录客户端访问信息,如浏览器、手机客户端等
$http_x_forwarded_for :当前端有代理服务器时,设置 Web 节点记录客户端地址的配置,此参数生效的前提是代理服务器上也进行了相关的 x_forwarded_for 设置
备注
$remote_addr 可能拿到的是反向代理IP地址
$http_x_forwarded_for 可以获取客户端真实IP地址
2.开启关闭日志功能
主配置文件nginx.conf
[root@test-88 ~]#cat /etc/nginx/nginx.conf
user www;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
[root@test-88 ~]#
主配置文件日志access_log /var/log/nginx/access.log
查看虚拟主机配置文件,除了default.conf默认文件,其他并未使用日志功能
[root@test-88 /etc/nginx/conf.d]#grep 'access_log' ./*.conf
./default.conf: #access_log /var/log/nginx/host.access.log main;
主配置文件日志格式信息
[root@test-88 /etc/nginx/conf.d]#tail -f /var/log/nginx/access.log
关闭日志功能
access_log off;
3.多虚拟主机的日志
由于企业会有多个网站业务,日志也必然需要分开记录。
单独写入到各自的server{}标签内即可。
⚠️开启access_log日志的参数,可以写在server{}区域内,但是日志格式化的参数,只能写在http{}区域中
1.全局配置
全局定义好日志格式,子页面配置中定义日志路径即可。
更改配置测试
原全局配置
[root@test-88 ~]#cat /etc/nginx/nginx.conf
user www;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
[root@test-88 ~]#
现全局配置
[root@test-88 ~]#vim /etc/nginx/nginx.conf
[root@test-88 ~]#cat /etc/nginx/nginx.conf
user www;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
[root@test-88 ~]#
原虚拟主机文件配置
[root@test-88 ~]#cat /etc/nginx/conf.d/huoying.conf
server{
listen 80;
server_name huoying.linux.cc;
charset utf-8;
location / {
root /www/huoying/;
index index.html;
}
}
server{
listen 81;
server_name _;
charset utf-8;
location / {
root /www/haizeiwang/;
index index.html;
}
}
[root@test-88 ~]#
现虚拟主机配置文件
[root@test-88 ~]#cat /etc/nginx/conf.d/huoying.conf
log_format main1 '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
server{
listen 80;
server_name huoying.linux.cc;
charset utf-8;
access_log /var/log/nginx/huoying_80_access.log main1;
location / {
root /www/huoying/;
index index.html;
}
}
server{
listen 81;
server_name _;
charset utf-8;
access_log /var/log/nginx/huoying_81_access.log main1;
location / {
root /www/haizeiwang/;
index index.html;
}
}
[root@test-88 ~]#
测试log日志
[root@test-88 ~]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@test-88 ~]#systemctl reload nginx
三、错误日志
Nginx能够将自身运行故障的信息也写入到指定的日志文件中。对于错误信息的调试,是维护Nginx的重要手段,指令是error_log
,可以放在http{}全局中,也可以单独为虚拟主机记录。
关于该参数的官网文档,以及具体的用法
https://nginx.org/en/docs/ngx_core_module.html#error_log
和access_log用法一样
Syntax: error_log file [level]; Default: error_log logs/error.log error; Context: main, http, mail, stream, server, location
语法:
error_log file level;
日志级别在乎debug|info|notice|warn|error|crit|alert|emerg
级别越高,日志记录越少,生产常用模式是warn|error|crit级别
日志的记录,会给服务器增加额外大量的IO消耗,按需修改
crit表示nginx已经出现严重错误以及崩溃,才记录日志,记录日志太少
测试语法
[root@test-88 ~]#vim /etc/nginx/conf.d/pord_89.conf
[root@test-88 ~]#cat /etc/nginx/conf.d/pord_89.conf
log_format main2 '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
server{
listen 10.0.0.89:80;
server_name localhost;
charset utf-8;
access_log /var/log/nginx/port_89.log main2;
error_log /var/log/nginx/port_89_error.log error;
location / {
root /www/port_89;
index index.html;
}
}
[root@test-88 ~]#
[root@test-88 ~]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
自动生成配置文件模板
https://www.digitalocean.com/community/tools/nginx?domains.0.php.wordPressRules=true&domains.0.logging.acces
四、404页面优化
nginx指令error_page的作用是当发生错误的时候能够显示一个预定义的uri;
语法1
error_page 404 /404.html;
语法2
error_page 404 https://error.taobao.com/app/tbhome/common/error.html;
错误页面优化,nginx,默认访问出错后,会返回不同的错误页面
40X系列的页面
404 not found 服务器上找不到资源
403 Forbidden 一般都是权限不足
标签:实战,log,虚拟主机,nginx,88,conf,test,root
From: https://www.cnblogs.com/yechangyao/p/18120154