Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
环境:
服务器:CentOS 6.8
客户端:Windows 10 14393
大纲:
1、下载nginx源码包
2、编译安装源码包
3、认识目录结构
4、配置虚拟主机
5、实现域名重定向
6、总结
1、=下载nginx源码包==========
nginx版本号nginx1.10.3
wget http://nginx.org/download/nginx-1.10.3.tar.gz
##下载nginx源码包
tar zxvf nginx-1.10.3.tar.gz
##解压源码包
cd nginx-1.10.3/
##进入目录
2、=编译安装源码包===========
提示:由于nginx编译时核心组件基本都已经安装了,所以我们只需要接入几个扩展模块就好了
useradd -M -s /sbin/nologin nginx
##创建nginx用户
yum install pcre-devel.x86_64 -y
##安装pcre的devel
yum install openssl-devel.x86_64 -y
##安装openssl的devel
./configure --prefix=/application/nginx1.10.3 --with-http_stub_status_module --with-http_ssl_module --user=nginx --group=nginx
#prefix是nginx的安装路径
#stub_status状态模块,如果不加,后面要开启这个模块就需要重新编译但是不用安装。
#ssl模块
#user指定用户
#指定组
##编译安装比如以上的依赖包,如果是编译安装的一定要在编译的时候指定它的绝对路径否则会报错
echo $?
##查看是否有错误,0表示一切正常
make
##
echo $?
##检查
make install
##安装
echo $?
##检查
ln -s /application/nginx1.10.3/ /application/nginx
##优化链接,驱版本号
3、=认识目录结构==========
cd /application/nginx
##进入目录
├── conf##配置文件
│ ├── fastcgi.conf
│ ├── fastcgi.conf.default
│ ├── fastcgi_params
│ ├── fastcgi_params.default
│ ├── koi-utf
│ ├── koi-win
│ ├── mime.types
│ ├── mime.types.default
│ ├── nginx.conf##主配置文件
│ ├── nginx.conf.default ##默认主配置文件
│ ├── scgi_params
│ ├── scgi_params.default
│ ├── uwsgi_params
│ ├── uwsgi_params.default
│ └── win-utf
├── html##默认站点
│ ├── 50x.html
│ └── index.html
├── logs##日志文件
└── sbin##命令目录
└── nginx##nginx -h可以查看帮助
##提示:nginx的目录结构和操作相比较apache个人感觉是要简单点的。
4、=配置虚拟主机===============
!!/提示:如果已经比较数量apache的虚拟主机,那么nginx的虚拟主机也差不多主要表现形式有以下三种:
基于端口的虚拟主机 ##这个比基于IP的用的要多点
基于IP的虚拟主机 ##这个平时学习也基本不太用
基于域名的虚拟主机 ##这个用的最多了,等等也是用这个来搭建虚拟主机
apache的虚拟主机是在extra扩展配置目录中的httpd-vhosts.conf文件配置,而且这个配置文件要和httpd.conf主配置文件前后呼应才行增加了操作步骤,nginx的则不需要所有操作都在主配置文件中。
在配置虚拟主机之前先来认识下配置文件
/!!
egrep -v "#|^$" conf/nginx.conf.default > conf/nginx.conf
##将主配置文件化复杂为简单,方便学习,egrep也可以是grep -e(扩展的正则表达式)-v是除了什么之外的,^$标示空行,后面就是重定向覆盖了,因为nginx默认就有一个备份的配置文件,所以我们就不用动手了。
vim conf/nginx.conf
worker_processes 1;
##最大的工作进程数,一般和CPU的核心数对应
events {
worker_connections 1024;
##我的给人理解是并发数
}
http {
include mime.types;
##设定mine类型,类型由mime.type文件定义
default_type application/octet-stream;
##默认文件类型
sendfile on;
##nginx调用sendfile函数来输出文件,对于普通应用必须为on。如果用来进行下载磁盘IO重负载应用##可以已设置为off
keepalive_timeout 65;
##长链接超时时间,单位秒
server {
##server标签
listen 80;
##监听端口
server_name localhost;
##域名
location / {
root html;
##站点目录,apache是DocumentRoot,默认站点是htdocs
index index.html index.htm;
##默认识别的网站主页文件,如果不存在直接报错403
}
error_page 500 502 503 504 /50x.html;
##当访问时错误的话就跳转到默认站点下的50x.html页面
location = /50x.html {
root html;
}
}
}
./sbin/nginx
##启动nginx
lsof -i :80
##查看80端口
curl localhost
##本地测试访问,如果没有错误说说明nginx启动成功
!!前面的铺垫已经做好了,下面就进入正题开始配置虚拟主机,基于
a)复制一个server标签,并且复制的server标签一定要在http的标签内
b)更改server_name对应的域名,实现不同域名的访问
c)更改站点路径,并且建立相应的index.html文件,否则会报错一般是403
d)修改测试的客户机的hosts文件
vim conf/nginx.conf
##将配置文件修改为如下
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.virtualperson.org;
location / {
root html/www;
index index.html index.htm;
}
}
server {
listen 80;
server_name blog.virtualperson.org;
location / {
root html/blog;
index index.html index.htm;
}
}
server {
listen 80;
server_name net.virtualperson.org;
location / {
root html/net;
index index.html index.htm;
}
}
}
./sbin/nginx -s reload
##平滑重启nginx服务
cd html/
##进入默认站点目录
for name in net www blog;do mkdir $name;echo "$name.virtualperson.org" > ./$name/index.html;done
##使用for循环创建相应的站点目录和主页文件
tree ./
##查看下目录结构
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
##防火墙开启80端口
一下操作在windows10上,也就是客户端:
修改windows10的hosts文件:
win+R-->system32-->drivers-->etc--> hosts添加如下记录
192.168.199.221 net.virtualperson.org blog.virtualperson.org www.virtualperson.org
测试是否能正常解析IP
ping www.virtualperson.org
ping blog.virtualperson.org
ping net.virtualperson.org
使用浏览器输入对应域名显示对应的域名说明测试成功
5、=实现域名重定向===================
为什么要域名重定向:
a)比如一家公司有多个域名,可以把多余域名都指向一台nginx服务器,nginx收到这个域名会把它转成对应的域名???
b)比如我们在某个域名提供商哪里购买了域名,然而我们自己并没有服务器,就可以把我们的域名指向某个有流量比较大的IP,地址,然后把把域名发不出去,可以利用这个方法给我们的域名刷流量。所以我们就需要在nginx服务器做域名重定向,因为在nginx服务器不识别的域名访问服务器,等同于IP直接访问,收到以IP的形式直接访问,我们可以选择拒绝,也可以设置为跳转到我们正真的域名上去。
##说的不是很清除,语文一直不是很好,请原谅。
pwd
/application/nginx/conf
##查看当前的工作路径
实例一多域名访问同一服务器:
vim nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name otherdomainname.org;
rewrite ^/(.*) http://net.virtualperson.org/$1 permanent;
}
server {
listen 80;
server_name www.virtualperson.org;
location / {
root html/www;
index index.html index.htm;
}
}
server {
listen 80;
server_name blog.virtualperson.org;
location / {
root html/blog;
index index.html index.htm;
}
}
server {
listen 80;
server_name net.virtualperson.org;
location / {
root html/net;
index index.html index.htm;
}
}
}
../sbin/nginx -s reload
##重启nginx服务
在Windows端测试,别忘了修改hosts文件
访问后将会会根据我们的设定跳转到net.virtualperson.org
##提示:重定向的server标签一定要在最前面,否则没有效果。
实例二拒绝IP直接访问:
前面说了只要是服务器未知的域名都是以IP的形式直接访问本机,所以我们可以拒绝IP的直接访问,配置如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server{
listen 80;
return 500;
}
server {
listen 80;
server_name otherdomainname.org;
rewrite ^/(.*) http://net.virtualperson.org/$1 permanent;
}
server {
listen 80;
server_name www.virtualperson.org;
location / {
root html/www;
index index.html index.htm;
}
}
server {
listen 80;
server_name blog.virtualperson.org;
location / {
root html/blog;
index index.html index.htm;
}
}
server {
listen 80;
server_name net.virtualperson.org;
location / {
root html/net;
index index.html index.htm;
}
}
}
附加:
!!以下内容,为附加内容,可以了解下
vim nginx.conf
..................
server {
listen 80;
server_name net.virtualperson.org;
location / {
root html/net;
index index.html index.htm;
}
}
server {
listen 80;
server_name status.virtualperson.org;
stub_status on;
access_log off;
}
}
../sbin/nginx -s reload
##重启nginx服务
通过Windows10浏览器访问域名:status.virtualperson.org得到如下结果:
Active connections: 2
##当前的活动连接,正在处理的活动连接数
server accepts handled requests
##server表示nginx启动到现在一共处理了多少个成功的链接
##accepts表示nginx一共处理了的握手次数
##握手次数-处理的连接=错误连接(请求丢失次数)
##hangled表示共处理了多少次请求
48 48 27
Reading: 0 Writing: 1 Waiting: 1
##reading读取到客户端的header信息数
##返回给客户端的header信息
##waiting已经处理完成正在等待下一次请求指令的驻留链接,开启keep-alive的情况,这个值等与action-(reading+writeing)
日志管理:nginx的日志分割操作我用的最多的就是利用crond和mv命令来实现的,这个简单也不需要在安装其他的工具。
6、=总结=====================
a)搭建Nginx前最好先去搭建下apache,毕竟经典啊,而且有关网站统计,Apache使用的还是挺多的,而且熟悉Apache也为更好的学习Nginx奠定了基础。
b)了解Apache和Nginx的区别和优缺点,可以让你能更更加方便的选择对应的服务。
c)Nginx的配置相对简单,而且目录结构简单,容易上手,Nginx占用资源小,高并发。
d)采用了比较新的epoll模型,而apache采用的是select模型。
e)Nginx支持反向代理,提高访问速度