[root@xyy ~]# yum install pcre pcre-devel -y #使nginx支持http rewrite模块
[root@xyy ~]# yum install openssl openssl-devel -y #使 nginx 支持 ssl
[root@xyy ~]# yum install zlib zlib-devel -y
方法一:yum安装:
[root@xyy ~]#yum install nginx -y
方法二:编译安装nginx:
[root@xyy ~]# yum -y install gcc gcc-c++ #安装编译环境
[root@xyy ~]# yum install -y zlib zlib-devel gd gd-devel #安装zlib
[root@xyy ~]# useradd -s /sbin/nologin nginx #创建用户 nginx
[root@xyy ~]# wget http://nginx.org/download/nginx-1.16.0.tar.gz #下载安装包
[root@xyy ~]# tar -zxvf nginx-1.16.0.tar.gz #解压
[root@xyy ~]# cd nginx-1.16.0 #进入安装包路径
[root@xyy nginx-1.16.0]# ./configure --prefix=/application/nginx-1.16.0/ \
--user=www \
--group=www \
--with-pcre \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-http_image_filter_module \
--with-http_slice_module \
--with-mail \
--with-threads \
--with-file-aio \
--with-stream \
--with-mail_ssl_module \
--with-stream_ssl_module
[root@xyy nginx-1.16.0]# make && make install
[root@xyy nginx-1.16.0]# cd /application/nginx-1.16.0/sbin
[root@xyy sbin]# ./nginx # 启动Nginx
[root@xyy sbin]# ./nginx -t # 验证配置文件是否正确
[root@xyy sbin]# ./nginx -s reload # 重启Nginx
[root@xyy sbin]# ./nginx -s stop # 停止Nginx
[root@xyy sbin]# ./nginx -v # 查看是否安装成功
nginx version: nginx/1.16.0
[root@xyy sbin]# ps -ef |grep nginx # 查看是否启动
root 37777 1 0 19:21 ? 00:00:00 nginx: master process
nginx 37778 37777 0 19:21 ? 00:00:00 nginx: worker process
root 38005 36024 0 19:39 pts/1 00:00:00 grep --color=auto nginx
添加环境变量
vim /etc/profile
export PATH="/application/nginx/sbin/:$PATH"
查看安装路径
[root@xyy ~]# rpm -ql nginx
nginx管理进程命令
关闭nginx(二选一)
[root@xyy ~]# systemctl stop nginx
[root@xyy ~]# nginx -s stop
打开nginx(二选一)
[root@xyy ~]# systemctl start nginx
[root@xyy ~]# nginx #直接输入也能启动服务
[root@xyy ~]# nginx -s reload #重新加载
[root@xyy ~]# nginx -s stop #停止
[root@xyy ~]# nginx -s quit #退出
[root@xyy ~]# nginx -s reopen #重启
[root@xyy ~]# nginx -t #测试nginx配置文件语法
[root@xyy ~]# nginx -c nginx.conf #指定用哪个配置文件
配置文件在/etc/nginx/nginx.conf
全局配置
user nginx; #Nginx进程所使用的用户
worker_processes auto; #Nginx运行的work进程数量
error_log /var/log/nginx/error.log; #Nginx错误日志存放路径
pid /run/nginx.pid; #Nginx服务运行后的pid进程号
include /usr/share/nginx/modules/*.conf; #include导入的外部配置
events事件模块
events {
worker_connections 1024; #每个worker进程支持的最大连接数
}
http {
...
//使用Server配置网站, 每个Server{}代表一个网站(简称虚拟主机)
server {
listen 80; //监听端口, 浏览器默认80端口,更改后用户也得手动更改
server_name localhost; //提供服务的域名或主机名,如不匹配域名输入 _ 下划线
access_log host.access.log //访问日志
//控制网站访问路径
'location' / {
root /usr/share/nginx/html; //存放网站代码路径
index index.html index.htm; //服务器返回的默认页面文件
}
//指定错误代码, 统一定义错误页面, 错误代码重定向到新的Locaiton
error_page 500 502 503 504 /50x.html;
}
...
//第二个虚拟主机配置
server {
}
include /etc/nginx/conf.d/*.conf; //导入包含/etc/nginx/conf.d/目录下所有以.conf结尾的文件
}
$remote_addr:记录访问网站的客户端IP地址
$remote_user:记录远程客户端用户名称
$time_local:记录请求访问的时间和时区
$request:记录用户的HTTP请求起始行信息
$status:记录http状态码,即请求访问状态,例如:200,404,502
$body_bytes_send:记录服务器发送给客户端的响应body字节数
$http_referer:记录此次请求是从哪个链接发送过来的, 判断盗链
$http_user_agent:记录客户端访问信息,例如:浏览器,手机客户端
$http_x_forwarded_for:当前拥有代理服务器时,设置web节点记录客户端地址的配置。
只需要在http区域中设置一个server标签
实际操作:just8th.linux.cc 看到 /www/just8th/index.html
操作如下:
[root@xyy ~]#groupadd www -g 666
[root@xyy ~]#useradd www -u 666 -g 666 -M -s /sbin/nologin
user www;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
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;
# tcp_nodelay on;
keepalive_timeout 65;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
}
虚拟主机在/etc/nginx/conf.d/中创建一个域名.conf文件,在里面只需要写server标签即可
server {
listen 80;
server_name just8th.linux.cc; #nginx会匹配 http://just8th.linux.cc:80
charset utf-8; #支持中文参数
root /www/just8th; #访问http://just8th.linux.cc:80时会默认在这个目录找数据
location / {
index index.html; #默认文件
}
}
创建index.html 图.jpg 1.txt
部署一个静态网站,nginx都能帮你返回,解析 请求
[root@xyy conf.d]mkdir -p /www/just8th
[root@xyy conf.d]#cat > /www/just8th/index.html < meta charset=utf-8>
> 这是Just8th网页。
> EOF
[root@xyy conf.d]#
[root@xyy just8th]#echo '一塌米哟抗几楼' > 1.txt
[root@xyy conf.d]#
[root@xyy just8th]#wget -O 图.jpg https://picx.zhimg.com/70/v2-906d173d60bc6c4c06d27e4919a02de7_1440w.awebp?source=172ae18b&biz_tag=Post
[root@xyy nginx]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@xyy just8th]#chown -R www.www /www/ #修改静态文件权限
在 C:\Windows\System32\drivers\etc\hosts 文件中添加一行
#虚拟机IP 网页域名
10.0.0.5 just8th.linux.cc
注意:添加的Ip地址不能有人使用
[root@xyy network-scripts]#ip addr add 10.0.0.88/24 dev ens33 #临时增加一个ip地址
vim /etc/nginx/conf.d/10.0.0.88.conf
server{
listen 10.0.0.88:80;
server_name _; #因为不需要主机名所以直接下划线
location / {
root /www/10.0.0.88;
index index.html;
}
}
在/www/88文件下创建index.html文件
[root@xyy www]# mkdir -p /www/88/
[root@xyy www]# echo "这是基于IP的虚拟主机 10.0.0.88" > /www/88/index.html
在C:\Windows\System32\drivers\etc\hosts 文件中添加一行
修改本地hosts
10.0.0.88 just88.linux.cc
此时访问just88.linux.cc或者10.0.0.88:80都是访问的/www/88/index.html文件
通过访问不同的端口访问不同的虚拟主机。可用于反向代理,负载均衡,可以基于虚拟主机实现多台服务器运行多个网站。
[root@xyy ~]# vim /etc/nginx/conf.d/port.conf
server{
listen 10.0.0.8:81;
charset utf-8;
server_name _;
location / {
root /www/81;
index index.html;
}
}
server{
listen 10.0.0.8:82;
charset utf-8;
server_name _;
location / {
root /www/82;
index index.html;
}
}
[root@xyy www]#mkdir -p /www/{port81,port82}
[root@xyy www]#echo 这是测试81端口 > /www/port81/index.html
[root@xyy www]#echo 这是测试82端口 > /www/port82/index.html
查看目录
数据目录
[root@xyy www]#tree -N /www/
/www/
├── 88
│ └── index.html
├── just8th
│ ├── 1.txt
│ ├── index.html
│ └── 图.jpg
├── port81
│ └── index.html
└── port82
└── index.html
配置文件
[root@xyy www]#tree -N /etc/nginx/conf.d/
/etc/nginx/conf.d/
├── 10.0.0.88.conf
├── just8th.linux.cc.conf
└── port.conf
systemctl restart nginx
查看监听的端口
[root@xyy www]#netstat -tlunp |grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 52482/nginx: master
tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN 52482/nginx: master
tcp 0 0 0.0.0.0:82 0.0.0.0:* LISTEN 52482/nginx: master
多域名需要多个配置文件,表示多个站点。根据.conf指定的server_name匹配域名,找到对应的server{}标签以及对应的数据目录。
[root@xyy conf.d]#vim ys.conf
server{
listen 80; #监听80端口
charset utf-8; #中文编码
server_name ys.linux.cc; #域名
location / {
root /www/ys;
index index.html;
}
}
[root@xyy conf.d]#vim lol.conf
server{
listen 80;
charset utf-8;
server_name lol.linux.cc;
location / {
root /www/lol;
index index.html;
}
}
随便写点东西在里面
[root@xyy conf.d]#mkdir -p /www/ys/ /www/lol/
[root@xyy conf.d]#echo 总有地面的生灵敢于直面雷霆的威光 > /www/ys/index.html
[root@xyy conf.d]#echo 爱你老妈,明天见 > /www/lol/index.html
在 C:\Windows\System32\drivers\etc\文件再加两个域名
10.0.0.5 just8th.linux.cc ys.linux.cc lol.linux.cc
[root@xyy conf.d]#systemctl restart nginx
在server{}中添加proxy_pass参数,参数后面接跳转的网页即可。
修改过后
查询了nginx官方笔记,发现负载均衡只能写在http{}标签里
weight是权重,权重越大越容易访问到
默认是开启日志记录功能的,但是开启日志功能会造成大量的IO,消耗服务器性能,在转发服务器上nginx不需要日志功能可以关闭,节约资源。
访问配置文件,注释access_log一行,添加access_log off;
vim /etc/nginx/nginx.conf
#access_log /var/log/nginx/access.log main;
access_log off;
每个虚拟主机进行单独的日志记录有利于分类管理。
针对每个虚拟主机的.conf文件添加日志参数和不同的日志保存路径,这样就可以在不同的日志文件看到对应的日志信息了
这样设置除了单独设置日志规则和日志保存地址的虚拟主机,其他的日志统一记录在/var/log/nginx/access.log文件里
错误日志用法一样,但是可以写在http{},server{}里面。
日志的等级分为:debug,info,notice,warn,error,crit,alert
debug记录最为详细,但会占用大量磁盘空间,alert记录是严重的错误,但内容很少。默认的等级是error,能记录一般常见的错误。
错误日志可以写在server{}标签里
根据不同的错误码进行不同的html文件设置。根据本地的html文件或者url都行。
启动nginx时报错
[root@xyy conf.d]#nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
解决方法:
nginx端口被占用,通过ps -ef |grep nginx查看nginx进程PID,然后通过kill命令关闭进程。
kill -9 nginx
修改反向代理后报错
解决方法:
proxy_pass后输入的URL地址前缀不正确,添加http://后重新检测语法——通过
dns解析域名失败
解决方法:在/etc/hosts中加入IP ys.linux.cc