什么是nginx
Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
nginx安装
1、关闭防火墙
在Linux系统中默认有防火墙Iptables管理者所有的端口,只启用默认远程连接22端口其他都关闭,咱们上面设置的80等等也是关闭的,所以我们需要先把应用的端口开启。
方法一:直接关闭防火墙,这样性能较好,但安全性较差,如果有前置防火墙可以采取这种方式
# 关闭防火墙 [root@localhost ~]# service iptables stop # 关闭开机自启动防火墙 [root@localhost ~]# chkconfig iptables off [root@localhost ~]# chkconfig --list|grep ipt
下面是防火墙的其他操作命令:
方法二:将开启的端口加入防火墙白名单中,这种方式较安全但性能也相对较差:
#编辑防火墙白名单 [root@localhost ~]# vim /etc/sysconfig/iptables #增加下面一行代码 -A INPUT -p tcp -m state -- state NEW -m tcp --dport 80 -j ACCEPT #保存退出,重启防火墙 [root@localhost ~]# service iptables restart
2、关闭selinux
Linux安装好之后,通常SELinux都是处于默认的开启状态,开启的情况下可能会导致一些服务安装失败。所以,在不需要的情况下完全可以关闭掉。
1、查看SELinux的状态:
[root@localhost ~]# sestatus SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: enforcing Mode from config file: enforcing Policy MLS status: enabled Policy deny_unknown status: allowed Max kernel policy version: 28
2、永久关闭SELinux:
修改配置文件/etc/selinux/config,将其中的SELINUX=enforcing改为SELINUX=disabled
[root@localhost ~]# vi /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. #SELINUX=enforcing SELINUX=disabled # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted
3、重启系统,再执行sestatus查看状态
reboot [root@localhost ~]# sestatus SELinux status: disabled
3、下载Nginx及相关组件
Linux系统是Centos 6.5 64位,我直接切换到root用户下安装:
进入用户目录下载程序:
下载相关组件:
[root@localhost src]# wget http://nginx.org/download/nginx-1.10.2.tar.gz 省略安装内容... [root@localhost src]# wget http://www.openssl.org/source/openssl-fips-2.0.10.tar.gz 省略安装内容... [root@localhost src]# wget http://zlib.net/zlib-1.2.11.tar.gz 省略安装内容... [root@localhost src]# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz 省略安装内容...
安装c++编译环境,如已安装可略过。
4、安装Nginx及相关组件
都是先解压,随后 配置、make和安装三合一。
openssl安装
[root@localhost src]# tar zxvf openssl-fips-2.0.10.tar.gz 省略安装内容... [root@localhost src]# cd openssl-fips-2.0.10 [root@localhost openssl-fips-2.0.10]# ./config && make && make install 省略安装内容...
pcre安装
[root@localhost src]# tar zxvf pcre-8.40.tar.gz 省略安装内容... [root@localhost src]# cd pcre-8.40 [root@localhost pcre-8.40]# ./configure && make && make install 省略安装内容...
zlib安装
[root@localhost src]# tar zxvf zlib-1.2.11.tar.gz 省略安装内容... [root@localhost src]# cd zlib-1.2.11 [root@localhost zlib-1.2.11]# ./configure && make && make install 省略安装内容...
nginx安装
[root@localhost src]# tar zxvf nginx-1.10.2.tar.gz 省略安装内容... [root@localhost src]# cd nginx-1.10.2 [root@localhost nginx-1.10.2]# ./configure && make && make install 省略安装内容...
5、启动Nginx
先找一下nginx安装到什么位置上了
进入nginx目录并启动
1、用 whereis libpcre.so.1命令找到libpcre.so.1在哪里
2、用 ln -s /usr/local/lib/libpcre.so.1 /lib64 命令做个软连接就可以了
3、用 local/nginx/sbin/nginx 启动Nginx
4、用 ps -aux | grep nginx 查看状态
[root@localhost nginx]# whereis libpcre.so.1 [root@localhost nginx]# ln -s /usr/local/lib/libpcre.so.1 /lib64 [root@localhost nginx]# sbin/nginx [root@localhost nginx]# ps -aux | grep nginx
查看nginx是否启动的方法:
[root@bogon nginx]# lsof -i:80
[root@bogon nginx]# netstat -ntpl
进入Linux系统的图形界面,打开浏览器输入localhost会看到下图,说明nginx启动成功。
在浏览器界面上访问:
利用elinks文本浏览器访问,没有缓存!
[root@bogon nginx]# yum install elinks
自定义DNS解析文件:
用的windows系统,配置一下host在“C:\Windows\System32\drivers\etc”下的hosts中配置一下域名重定向: 虚拟机IP aaa bbb ccc。
那么在浏览器输入 http://aaa、 http://bbb都会指向http://主机IP。
nginx常用操作
# 启动 [root@localhost ~]# /usr/local/nginx/sbin/nginx # 停止/重启 [root@localhost ~]# /usr/local/nginx/sbin/nginx -s stop(quit、reload) # 命令帮助 [root@localhost ~]# /usr/local/nginx/sbin/nginx -h # 验证配置文件 [root@localhost ~]# /usr/local/nginx/sbin/nginx -t # 配置文件 [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
# 重启
./sbin/nginx -s reload
nginx配置
配置文件即变量文件,保存软件运行的各种参数。
打开nginx配置文件位于nginx目录下的conf文件夹下:
vim conf/nginx.conf
默认网站
当配置文件有且只有一个server的时候,那么该server就被nginx认为是默认网站,所有发给Nginx服务器80端口的数据都会默认给该server。
默认监听80端口,还可以配置监听其他端口,例如以下配置不仅可以监听80端口,还可以监听81端口:
server { listen 80; server_name nginx.test.com; charset utf8; access_log logs/access_json.log log_json; location / { root html; index index.html index.htm; } } server { listen 81; server_name nginx.test.com; charset utf8; access_log logs/access_json.log log_json; location / { root html; index index.html index.htm; } }
默认会访问 /usr/local/nginx/html/index.html 文件。
在html文件夹下添加a、b、c三个文件夹,分别在其内部添加index.html文件。
[root@bogon html]# ls 50x.html index.html [root@bogon html]# mkdir a [root@bogon html]# mkdir b [root@bogon html]# mkdir c [root@bogon html]# echo aaaa > a/index.html [root@bogon html]# echo bbb > b/index.html [root@bogon html]# echo cccc > c/index.html [root@bogon html]# echo bbbb > b/index.html [root@bogon html]# ls
查看:
[root@bogon html]# elinks 192.168.244.128/a --dump aaaa [root@bogon html]# elinks 192.168.244.128/b --dump bbbb [root@bogon html]# elinks 192.168.244.128/c --dump cccc
在其他系统也可以访问这个页面。
目录权限控制
location /a { # 允许本机访问 allow 0.0.0.0; deny all; return 403; # 返回url地址 return http://www.baidu.com; }
修改配置文件后步骤:
[root@bogon nginx]# sbin/nginx -t # 检测修改后的配置文件语法是否有误 [root@bogon nginx]# sbin/nginx -s reload # 重启nginx
非本机访问a目录:
目录访问验证
准备认证文件:
# 安装httpd-tools 依赖包 yum search htpasswd # 查看htpasswd的依赖包 yum install httpd-tools
# 创建htpasswd文件 [root@bogon nginx]# mkdir /etc/nginx [root@bogon nginx]# vim /etc/nginx/htpasswd
# 制作密码 [root@bogon nginx]# htpasswd -m /etc/nginx/htpasswd bob New password: Re-type new password: Adding password for user bob
# 查看密码 [root@bogon nginx]# cat /etc/nginx/htpasswd bob:$apr1$gfaAYD95$eCjdkxQ9DcSPBHfGWO3mk1
配置文件,访问b目录必须输入用户名和验证码:
location /b{ auth_basic ”登陆验证"; auth_basic_user_file /etc/nginx/htpasswd; }
测试:
日志管理
Nginx访问日志主要有两个参数控制:
1) log_format:用来定义记录日志的格式,可以定义多种日志格式,取不同名字即可
log_format log_name string
# 定义log_json 格式 log_format log_json '{ "@timestamp": "$time_local", ' '"remote_addr": "$remote_addr", ' '"referer": "$http_referer", ' '"request": "$request", ' '"status": $status, ' '"bytes": $body_bytes_sent, ' '"agent": "$http_user_agent", ' '"x_forwarded": "$http_x_forwarded_for", ' '"up_addr": "$upstream_addr",' '"up_host": "$upstream_http_host",' '"up_resp_time": "$upstream_response_time",' '"request_time": "$request_time"' ' }';
日志输出路径:
server { listen 80; server_name nginx.test.com; charset utf8;
# 输出到access_log文件,且以log_json定义的格式输出到文件access_json文件中 access_log logs/access_json.log log_json; }