nginx安装及网站部署

一、nginx安装

1.安装环境依赖

[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

2.安装nginx

方法一: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结尾的文件

}
配置日志格式 

nginx安装及网站部署_第1张图片

$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节点记录客户端地址的配置。

  

三、部署网站

1.单虚拟主机

只需要在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
修改/etc/nginx/nginx.conf
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
测试nginx配置文件语法
[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
 域名访问虚拟机

nginx安装及网站部署_第2张图片

nginx安装及网站部署_第3张图片

2.基于IP的多虚拟主机

给网卡绑定多个ip地址

注意:添加的Ip地址不能有人使用

[root@xyy network-scripts]#ip addr add 10.0.0.88/24 dev ens33  #临时增加一个ip地址
修改虚拟主机绑定多个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
重启nginx服务后,在浏览器访问IP地址

nginx安装及网站部署_第4张图片

IP绑定测试域名

在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文件

3.基于多端口虚拟主机

通过访问不同的端口访问不同的虚拟主机。可用于反向代理,负载均衡,可以基于虚拟主机实现多台服务器运行多个网站。

配置文件
[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
访问81端口

nginx安装及网站部署_第5张图片

访问82端口 

nginx安装及网站部署_第6张图片

4.多域名虚拟主机

多域名需要多个配置文件,表示多个站点。根据.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
重启nginx服务
[root@xyy conf.d]#systemctl restart nginx
访问lol.linux.cc

nginx安装及网站部署_第7张图片

访问ys.linux.cc

nginx安装及网站部署_第8张图片

反向代理

在server{}中添加proxy_pass参数,参数后面接跳转的网页即可。

nginx安装及网站部署_第9张图片

修改过后 

nginx安装及网站部署_第10张图片

负载均衡 

查询了nginx官方笔记,发现负载均衡只能写在http{}标签里

nginx安装及网站部署_第11张图片

weight是权重,权重越大越容易访问到 

日志管理

1.访客日志access_log

开启/关闭日志功能

默认是开启日志记录功能的,但是开启日志功能会造成大量的IO,消耗服务器性能,在转发服务器上nginx不需要日志功能可以关闭,节约资源。

访问配置文件,注释access_log一行,添加access_log off;

vim /etc/nginx/nginx.conf

#access_log  /var/log/nginx/access.log  main;
access_log off;
虚拟主机单独记录日志

每个虚拟主机进行单独的日志记录有利于分类管理。

nginx安装及网站部署_第12张图片

针对每个虚拟主机的.conf文件添加日志参数和不同的日志保存路径,这样就可以在不同的日志文件看到对应的日志信息了

nginx安装及网站部署_第13张图片

这样设置除了单独设置日志规则和日志保存地址的虚拟主机,其他的日志统一记录在/var/log/nginx/access.log文件里

2.错误日志error_log

错误日志用法一样,但是可以写在http{},server{}里面。

日志的等级分为:debug,info,notice,warn,error,crit,alert

debug记录最为详细,但会占用大量磁盘空间,alert记录是严重的错误,但内容很少。默认的等级是error,能记录一般常见的错误。

开启错误日志

错误日志可以写在server{}标签里

nginx安装及网站部署_第14张图片

错误页面优化

根据不同的错误码进行不同的html文件设置。根据本地的html文件或者url都行。

nginx安装及网站部署_第15张图片

nginx安装及网站部署_第16张图片

报错解决

启动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 

你可能感兴趣的:(nginx,运维,linux)