天天看点

Linux高级运维(一)-搭建NginX 网站服务器

Web服务器:(httpd\nginx\lighttpd\tomcat\weblogic\websphere\jboss)

Nginx性能好,免费

Tomcat免费

Nginx(taobao) ---->tengine

创建一个无法登录的用户useradd -s /sbin/nologin

权限都是针对用户rwxrwxrwx

程序QQ[发送文件]

谁运行的这个程序 root ,admin ---->QQ

root----->Nginx[面向全网提供服务]

打命令是root执行命令,以普通用户的身份启动

现代化软件都是模块化设计

打包100个功能1G

模块化(默认模块)

源码编译安装

./config --with–模块名称--with-模块名称  安装哪个名称

./configure —without-模块名称  不安装哪一个模块

With-http-ssl-module 加密模块

Compiler 解释器

Pcre -devel 红帽的依赖包一般以devel 结尾

netstat命令可以查看系统中启动的端口信息,该命令常用选项如下:

-a显示所有端口的信息

-n以数字格式显示端口号

-t显示TCP连接的端口

-u显示UDP连接的端口

-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口

-p显示监听端口的服务名称是什么(也就是程序名称)

/usr/local/nginx/sbin/nglinx(1.10)

mv 重命名

/root/lnmp_soft/nglinx-1.12.2/objs/nginx(1.12)

服务启动状态

make upgrade 关机重启 

或者杀死nginx

/usr/local/nginx/sbin/nginx //启动服务

Killa nginx

/usr/local/nginx/conf配置文件

/usr/local/nginx/html网页文件

/usr/local/nginx/logs日志文件

/usr/local/nginx/sbin程序

index index.html index.htm; //默认网页

index 默认首页

apache

<virtualHost*:80>

Servsername xxx

Documentroot xxx

Nginx

Server{

Listen 80; --默认80

server_name xxx;

root html;

}

  安装httpd-tools软件

yum -y install httpd-tools.x86_64

htpasswd -c 创建文件名

-c create 创建文件

htpasswd -c /usr/local/nginx/pass tom 创建pass文档并且创建用户tom

htpasswd /usr/local/nginx/pass harry 追加用户harry

虚拟主机:基于域名\基于ip\基于端口

用一台主机一个软件,实现很多个网站

server {

listen 80;

server_name localhost \域名\IP;

auth_basic “qing shu ru zhang hao ji mi ma:”;

auth_basic_user_file “usr/local/nginx/pass”;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {

root html;

index index.html index.htm;

}

编码0-127 

人:英文

计算机:010101

Asii 编码

GB2312(中国)

Apple unicode(utf-8) 万国编码

Charset utf-8 翻译为中文

1.源码安装

2.用户认证

3.虚拟主机

http 协议是明文协议

http+ssl=https(秘钥)

Client----------------server

对称加密:

123------------123

非对称加密:()

123--------------t8

一,安装Nginx

1,首先,确认虚拟机的yum源可用;并设置防火墙为trusted,SELinux为关闭状态

2,确认lnmp_soft.tar.gz ; nginx-1.12.2.tar.gz这2个压缩包在虚拟机里;

3,开始安装Nginx

#安装相应的依赖包

[[email protected] ~]# yum -y install gcc pcre-devel openssl-devel

#创建对应的用户

[[email protected] ~]# useradd -s /sbin/nologin nginx

#解压软件包

[[email protected] ~]# tar -xf lnmp_soft.tar.gz

[[email protected] ~]# cd lnmp_soft/

[[email protected] lnmp_soft]# tar -xf nginx-1.10.3.tar.gz

#编译、安装

[[email protected] lnmp_soft]# cd nginx-1.10.3/

[[email protected] nginx-1.10.3]# ./configure \

–prefix=/usr/local/nginx \ #指定安装路径

–user=nginx \ #指定用户

–group=nginx \ #指定组

–with-http_ssl_module #开启SSL加密功能

[[email protected] nginx-1.10.3]# make && make install

二,Nginx常见命令的用法

#启动服务

[[email protected] nginx-1.10.3]# /usr/local/nginx/sbin/nginx

#关闭服务

[[email protected] nginx-1.10.3]# /usr/local/nginx/sbin/nginx -s stop

#重新加载配置文件

[[email protected] nginx-1.10.3]# /usr/local/nginx/sbin/nginx -s reload

#查看软件信息

[[email protected] nginx-1.10.3]# /usr/local/nginx/sbin/nginx -V

#创建软链接,方便后期使用

[[email protected] nginx-1.10.3]# ln -s /usr/local/nginx/sbin/nginx /sbin/

三,用nginx测试命令是否可用

[[email protected] nginx-1.10.3]# nginx

四,用netstat命令查看nginx服务信息

[[email protected] nginx-1.10.3]# netstat -anutlp | grep nginx

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6101/nginx:…

补充:netstat的各选项意思

-a 显示所有端口的信息

-n 以数字格式显示端口号

-t 显示TCP连接的端口

-u 显示UDP连接的端口

-l 显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口

-p 显示监听端口的服务名称是什么(也就是程序名称)

五,客户端测试

[[email protected] ~]# firefox http://192.168.4.5

案例一,升级Nginx

[[email protected] ~]# tar -xzvf nginx-1.12.2.tar.gz

[[email protected] ~]# cd nginx-1.12.2/

[[email protected] nginx-1.12.2]# ./configure \

–prefix=/usr/local/nginx

–user=nginx

–group=nginx

–with-http_ssl_module

#注意,此处只能make,不可以make install!!! 切记!切记!切记

[[email protected] nginx-1.12.2]# make

#备份老的配置文件

[[email protected] nginx-1.12.2]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginxold

#拷贝新版本

[[email protected] nginx-1.12.2]# cp objs/nginx /usr/local/nginx/sbin/

#查看升级后的版本

[[email protected] nginx-1.12.2]# nginx -V

nginx version: nginx/1.12.2

案例二,用户认证

目的:访问WEB页面需要进行用户认证;用户名为tom,密码为123456

#备份主配置文件,防止在修改出错时又找不到错误原因,可及时的恢复原配置文件

[[email protected] nginx-1.12.2]# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak

#修改主配置文件 (添加auth_basic开头的这两行)

[[email protected] nginx-1.12.2]# vim /usr/local/nginx/conf/nginx.conf

server {

listen 80;

server_name localhost;

auth_basic “shuru:”; #认证提示符(也就是在web页面上显示的)

auth_basic_user_file “/usr/local/nginx/pass”; #认证密码文件

location / {

root html;

index index.html index.htm;

}

生成密码文件前,先确保系统已安装httpd-tools

[[email protected] nginx-1.12.2]# yum -y install httpd-tools

#创建密码文件,并设置tom,密码123456

[[email protected] nginx-1.12.2]# htpasswd -c /usr/local/nginx/pass tom

New password:

Re-type new password:

Adding password for user tom

#如果是追加用户,则不需要-c选项

[[email protected] nginx-1.12.2]# htpasswd /usr/local/nginx/pass jerry

New password:

Re-type new password:

Adding password for user jerry

#验证密码文件是否成功

[[email protected] nginx-1.12.2]# cat /usr/local/nginx/pass

tom: a p r 1 apr1 apr1R.D1Zjr9 d 4 z Q M m F Q V V L v c N T S L r N s 11 j e r r y : d4zQMmFQVVLvcNTSLrNs11 jerry: d4zQMmFQVVLvcNTSLrNs11jerry:apr1 R j 3 M a Y d q Rj3MaYdq Rj3MaYdqXj/UHwaDopyCpHi.DcQmc/

#重启Nginx服务。(重启前确保Nginx是运行状态,否则会报错)

[[email protected] nginx-1.12.2]# nginx -s reload

#客户端验证

[[email protected] nginx-1.12.2]#firefox http://192.168.4.5

案例三,基于域名的虚拟主机

目标:

1,实现2个基于域名的虚拟主机,域名分别为www.a.com和www.b.com

2,对域名为www.a.com的站点进行用户认证,用户名称为tom,密码为123456

步骤一:

#修改主配置文件

#一个server就是一个虚拟主机

#root 为网页根目录

[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf

server {

listen 80;

server_name www.a.com; #把原来的修改为www.a.com

auth_basic “shuru:”;

auth_basic_user_file “/usr/local/nginx/pass”;

location / {

root html;

index index.html index.htm;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

#新增一个server,可以把上面的复制、粘贴下来,并做相应的修改

server {

listen 80;

server_name www.b.com; #把原来的修改为www.b.com

location / {

root www;

index index.html index.htm;

}

}

步骤二:

#创建网页根目录以及对应的首页文件

[[email protected] ~]# mkdir /usr/local/nginx/www

[[email protected] ~]# echo “wwww” > /usr/local/nginx/www/index.html

步骤三:

#重启nginx服务,客户端测试

1,先修改client客户端的/etc/hosts文件,进行域名解析

[[email protected] ~]# vim /etc/hosts

192.168.4.5 www.a.com www.b.com

2,client测试

[[email protected] ~]# firefox http://www.a.com

[[email protected] ~]# firefox http://www.b.com

案例四,拓展内容

一,基于端口的虚拟主机

步骤一:

#基于上一个实验,修改主配置文件

#在前面实验的基础上,新增2个新的server

[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf

server {

listen 8080;

server_name web1.example.com;

location / {

root web1;

index index.html index.htm;

}

}

server {

listen 8000;

server_name web1.example.com;

location / {

root web2;

index index.html index.htm;

}

}

步骤二:

#创建对应的网页根目录,以及首页文件

[[email protected] ~]# mkdir /usr/local/nginx/web1 /usr/local/nginx/web2

[[email protected] ~]# echo “web1” > /usr/local/nginx/web1/index.html

[[email protected] ~]# echo “web2” > /usr/local/nginx/web2/index.html

步骤三:

#重启nginx服务,并在客户端client测试

[[email protected] ~]# nginx -s reload

#在client上,/etc/hosts文件里添加一个域名解析

[[email protected] ~]# vim /etc/hosts

192.168.4.5 web1.example.com

[[email protected] ~]# firefox http://web1.example.com:8080

[[email protected] ~]# firefox http://web1.example.com:8000

二,基于IP的虚拟主机

步骤一:

#要配置基于IP的虚拟主机,必须要先给web服务器proxy的网卡设备添加2个IP别名(也就是一个网卡绑定多个IP)

#首先,执行ifconfig,查看网卡设备名称

[[email protected] ~]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet 192.168.4.5 netmask 255.255.255.0 broadcast 192.168.4.255

#我们可以看到网卡设备名称为 eth0

#下面,我们给该设备添加IP别名

#添加IP别名1

[[email protected] ~]# ifconfig eth0:1 192.168.4.6 broadcast 192.168.4.255 netmask 255.255.255.0 up

[[email protected] ~]# route add -host 192.168.4.6 dev eth0:1

[[email protected] ~]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet 192.168.4.5 netmask 255.255.255.0 broadcast 192.168.4.255

eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet 192.168.4.6 netmask 255.255.255.0 broadcast 192.168.4.255

#添加IP别名2

[[email protected] ~]# ifconfig eth0:2 192.168.4.7 broadcast 192.168.4.255 netmask 255.255.255.0 up

[[email protected] ~]# route add -host 192.168.4.7 dev eth0:2

[[email protected] ~]# ifconfig

[[email protected] ~]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet 192.168.4.5 netmask 255.255.255.0 broadcast 192.168.4.255

eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet 192.168.4.6 netmask 255.255.255.0 broadcast 192.168.4.255

eth0:2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet 192.168.4.7 netmask 255.255.255.0 broadcast 192.168.4.255

#到此,配置完成!!!

步骤二:

#修改主配置文件,在前面的基础之上新增2个server

[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf

server {

listen 192.168.4.6:80;

server_name 192.168.4.6;

location / {

root web3;

index index.html index.htm;

}

}

server {

listen 192.168.4.7:80;

server_name 192.168.4.7;

location / {

root web4;

index index.html index.htm;

}

}

步骤三:

#创建对应的网页根目录,以及首页文件

[[email protected] ~]# mkdir /usr/local/nginx/web3 /usr/local/nginx/web4

[[email protected] ~]# echo “web3” > /usr/local/nginx/web3/index.html

[[email protected] ~]# echo “web4” > /usr/local/nginx/web4/index.html

步骤四:

#重启nginx服务,并在客户端测试

[[email protected] ~]# nginx -s reload

[[email protected] ~]# firefox http://192.168.4.6

[[email protected] ~]# firefox http://192.168.4.7

思考题:

在配置基于IP的虚拟主机时,如果2个server_name后面写的是同一个域名,客户端的/etc/hosts里也写了对应的域名解析。

那么,我们在测试时,输入的不是IP地址,而是域名时,会出现什么问题?原因是什么??

案例五,SSL虚拟主机

沿用基于域名的虚拟主机,配置加密网站,目标为:

1,域名为www.a.com

2,该站点通过https访问

3,通过私钥、证书对该站点所有数据加密

步骤一:

#生成私钥与证书

[[email protected] ~]# cd /usr/local/nginx/conf/

#生成私钥匙

[[email protected] conf]# openssl genrsa > cert.key

Generating RSA private key, 2048 bit long modulus

…+++

…+++

e is 65537 (0x10001)

#生成证书

[[email protected] conf]# openssl req -new -x509 -key cert.key > cert.pem

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter ‘.’, the field will be left blank.

Country Name (2 letter code) [XX]:CN #CN为国家

State or Province Name (full name) []:Guangdong #Guangdong 为省份

Locality Name (eg, city) [Default City]:GZ #GZ 为城市

Organization Name (eg, company) [Default Company Ltd]:tedu #tedu为公司名

Organizational Unit Name (eg, section) []:operation #operation为部门名

Common Name (eg, your name or your server’s hostname) []:proxy #proxy为主机名

Email Address []:[email protected] #[email protected] 为邮箱

步骤二:

#修改主配置文件,设置加密网站的虚拟主机

#如果主配置文件有操作上面的虚拟主机,为了防止看着太乱,可以先把上面拓展的2个虚拟主机(端口、IP)的配置都注释掉

#vim批量操作的技巧:

#ctrl+v 一直按着选中要修改的行;再用shift+i 执行要做的操作(我们这边为加#);然后再按esc键;就一下子全部加了#啦

#把配置最后一个被#注释掉的server开启,并做相应的修改

[[email protected] conf]# vim /usr/local/nginx/conf/nginx.conf

server {

listen 443 ssl;

server_name www.c.com;

ssl_certificate      cert.pem;
    ssl_certificate_key  cert.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        root   html;
        index  index.html index.htm;
    }
}
           

步骤三:

#重启nginx服务

[[email protected] conf]# nginx -s reload

#客户端修改/etc/hosts文件,添加www.c.com

[[email protected] ~]# vim /etc/hosts

192.168.4.5 www.a.com www.b.com web1.example.com www.c.com

#访问测试

#注意:需要添加信任证书后,才可以正常访问

[[email protected] ~]# firefox https://www.c.com

拓展知识点:

nginx的虚拟主机的域名含有通配符*这种情况时,nginx是如何确定访问的顺序??

比如:第一台虚拟主机的域名是www.a.com *.a.com;第二台的是uc.a.com。那么我访问uc.a.com时,是返回第一台还是第二台呢?

答案是第二台的页面内容!!

原因如下:(官网文档里有说明,翻译如下)

在按名称搜索虚拟服务器期间,如果名称与多个指定的变量匹配(例如,通配符名称和正则表达式匹配),将按以下优先级顺序选择第一个匹配:

1、确切的名字

2、以星号开头的最长通配符名称,例如“ .example.com”

3、最长的通配符名称以星号结尾,例如“ mail.”

4、第一个匹配的正则表达式(按配置文件中的出现顺序)

继续阅读