Nginx return
-
- 安装
- rpm安装
rpm –ivh nginx
#这样安装可能会产生软件依赖问题
- yum 安装
yum install nginx –y
#简单,高效。但是不能定制,而且软件的更新不是很及时。而且先要安装epel源.
yum install epel-release -y
- 编译安装
wget + configure + make + make install
#可以定制软件,但是过程复杂,繁琐,效率低。
- 定制化制作rpm包,搭建yum仓库。
安装nginx前,必须先安装一个pcre库
yum 安装 : yum install pcre –y
yum install pcre-devel –y #安装devel会自动安装pcre。
- 源码安装
wget http://nginx.org/download/nginx-1.8.1.tar.gz #下载安装包
tar –xf nginx-1.8.1.tar.gz #解压安装包
cd nginx-1.8.1 #进入目录
useradd nginx –s /sbin/nologin -M #添加用户和默认组
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx-1.8.1 #安装nginx,如果想加模块,后面还可以连接模块,例如 --with-http_ssl_module,--with-http_stub_status_module等。这2个模块分别为:ssl功能,状态信息。
安装完毕后,创建一个无版本号的软链接
ln –s /usr/local/naginx-1.8.1 /usr/local/naginx
②yum安装
yum install epel –y
yum install nginx –y
yum install zlib-devel -y
-
- 启动
- 源码安装
/usr/local/nginx/sbin/nginx
- yum 安装
service nginx start
启动后检查
netstat –ntulp | grep nginx
lsof –i :80
ps –ef | grep nginx
-
- 配置文件
nginx的配置文件为: /usr/local/nginx/conf/nginx.conf
主要是配置server里面的
server {
listen 80; #监听端口
server_name localhost; #网站域名
location / {
root html; #表示网站所放置的位置
index index.html index.htm; #网站名
}
error_page 500 502 503 504 /50x.html; #错误网站名
location = /50x.html {
root html;
}
-
- nginx模块
Nginx http 模块
Nginx http 功能模块 | 模块说明 |
|
|
ngx_http_core_module | 包括一些核心的 http 参数配置,对应 Nginx 的配置为 HTTP 区块部分 | ||
ngx_http_access_module | 访问控制模块,用来控制网站用户对 Nginx 的访问 | ||
ngx_http_gzip_module | 压缩模块,对 Nginx 返回的数据压缩,属于性能优化模块 | ||
ngx_http_fastcgi_module | FastCGI 模块,和动态应用相关的模块,如 PHP | ||
ngx_http_proxy_module | proxy 代理模块 | ||
ngx_http_upstream_module | 负载均衡模块,可实现网站的负载均衡和节点的健康检查 | ||
ngx_http_rewrite_module | URL 地址重写模块 | ||
ngx_http_limit_conn_module | 限制用户并发连接数以及请求数的模块 | ||
ngx_http_limit_req_module | 根据定义的 key 限制 Nginx 请求过程的速率 | ||
ngx_http_log_module | 访问日志模块,以指定的格式记录 Nginx 客户访问日志等信息 | ||
ngx_http_auth_basic_module | Web 认证模块,设置 Web 用户通过账号密码访问 Nginx | ||
ngx_http_ssl_module | ssl 模块,用于加密的 http 连接,如 https | ||
ngx_http_stub_status_module | 记录 Nginx 基本访问状态信息等的模块 |
-
- 多虚拟主机配置
- 在nginx/conf文件夹中创建一个vhost文件夹
mkdir /usr/local/nginx/conf/vhost
- 备份/usr/local/nginx/conf/nginx.conf
cp /usr/local/nginx/conf/nginx.conf{,.backup}
- 修改nginx.conf文件
将文件中,server这一段删除,并添加
include vhost/www.conf
include vhost/bbs.conf
include vhost/blog.conf
或者 include vhost/*.conf
- 从nginx.conf.backup文件中截取上面删除的server配置段,并在vhost中创建配置文件。
sed –n ’84,93’p /usr/local/nginx/conf/nginx.conf.backup >host/www.conf
sed –n ’84,93’p /usr/local/nginx/conf/nginx.conf.backup >host/bbs.conf
sed –n ’84,93’p /usr/local/nginx/conf/nginx.conf.backup >host/blog.conf
- 去掉配置文件开头的#,编辑配置文件
vim host/www.conf # server_name 设置为www.com,修改index.html为www.html
vim host/bbs.conf # server_name 设置为bbs.com,修改index.html为bbs.html
vim host/blog.conf # server_name 设置为blog.com,修改index.html为blog.html
- 创建测试网页文件并测试配置文件的正确性
echo “www”> /usr/local/nginx/html/www.html
echo “bbs”> /usr/local/nginx/html/bbs.html
echo “blog”> /usr/local/nginx/html/blog.html
/usr/local/nginx/sbin/nginx –t
- 查看nginx是否已经启动
ps –ef | grep nginx
lsof –i :80
如果没有启动,则:
/usr/local/nginx/sbin/nginx
如果已经启动,则:
/usr/local/nginx/sbin/nginx –s reload #平滑重启
- 测试网站搭建是否正确
修改C:\Windows\System32\drivers\etc\hosts,在最后面添加域名重定向。比如:
-
-
-
- www.com
-
-
10.0.0.8 bbs.com
10.0.0.8 blog.com
- 在浏览器中输入https://www.com https://bbs.com https://blog.com
-
- 查看nginx运行状态
要查看状态,安装时必须安装ngx_http_stub_status_module 模块。
创建一个虚拟主机,并在主机中增加2行
stub_status on;
access_log off';
可以追加访问控制
allow 10.0.0.2/24;
deny all; #表示只运行这个IP来查看
-
- 日志切割
创建一个脚本
vim cut_accesslog.sh
然后在脚本里面写入
cd /usr/local/nginx/logs/
/bin/mv /usr/local/nginx/logs/access.log access_$(date +%F).log
/usr/local/nginx/sbin/nginx –s reload
然后全路径加入到定时任务crontab。
-
- location匹配
- 优先匹配=号
- 其次匹配^~
- 匹配正则表达式
- 匹配普通字符串
- 所有不能匹配到的,匹配到/上。
-
- rewrite 地址跳转
nginx通过ngx_http_rewrite_module模块支持url重写、支持if条件判断,但不支持else。另外该模块需要PCRE支持,应在编译nginx时指定PCRE支持。根据相关变量重定向和选择不同的配置,从一个location跳转到另一个location,不过这样的循环最多可以执行10次,超过后nginx将返回500错误。同时,重写模块包含set指令,来创建新的变量并设其值,这在有些情景下非常有用的,如记录条件标识、传递参数到其他location、记录做了什么等等
1 2 3 4 5 6 7 8 9 10 11 | . :匹配除换行符以外的任意字符 ? :重复0次或1次 + :重复1次或更多次 * :重复0次或更多次 \d :匹配数字 ^ :匹配字符串的开始字符 $ :匹配字符串的结束字符 {n} :重复n次 {n,} :重复n次或更多次 [c] :匹配单个字符c [a-z] :匹配a-z小写字母的任意一个 |
rewrite 中的小括号和sed中的一样,后面可以接$1,$2….
例子:如果以前的域名为bbs.com,后来更改了域名为blog.com,但是想要用bbs.com也能到新的域名上,就用rewrite。
在bbs.conf中去除网页的定义。增加一行
rewrite ^/(.*) http://blog.com;
ngx_http_auth_basic_module认证模块
ngx_http_auth_basic_module模块实现让访问着,只有输入正确的用户密码才允许访问web内容
语法: auth_basic_user_file file;
默认值: —
配置段: http, server, location, limit_except
在配置文件中增加ngx_http_auth_basic_module模块。添加2行即可
auth_basic "test";
auth_basic_user_file /usr/local/nginx/conf/vhost/passwd;
然后到指定的目录创建密码文件,注:密码必须是加密的。
echo "xiao:$(openssl passwd -crypt 123456)" > /usr/local/nginx/conf/vhost/passwd
-
- 传递真实Client的IP地址
因为当nginx作为反向代理时,在后端的web服务器上的日志上记录的访问信息里,访问IP都是作为反向代理的nginx服务器的IP,而不能确定真实的客户IP。所以我们需要nginx将真正的客户端IP发送给后端的web服务器。
需要在location{ }里面添加一句:
proxy_set_header X-Real-IP $remote_addr;
或
proxy_set_header X-Forwarded-For $remote_addr;
2者的区别为
一般来说,X-Forwarded-For
是用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP
追加在X-Forwarded-For
中
来自4.4.4.4
的一个请求,header包含这样一行
X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3
代表 请求由1.1.1.1
发出,经过三层代理,第一层是2.2.2.2
,第二层是3.3.3.3
,而本次请求的来源IP4.4.4.4
是第三层代理
而X-Real-IP
,没有相关标准,上面的例子,如果配置了X-Read-IP
,可能会有两种情况
// 最后一跳是正向代理,可能会保留真实客户端IP
X-Real-IP: 1.1.1.1
// 最后一跳是反向代理,比如Nginx,一般会是与之直接连接的客户端IP
X-Real-IP: 3.3.3.3
-
- 反向代理和负载均衡
nginx反向代理可以按照轮询(默认)、ip哈希(ip_hash)、URL哈希(url_hash)、权重(weight)等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。
反向代理:
location / { #因为是/,所以表示传递所有ULR
proxy_pass http://www.linuxidc.com; #反向代理的域名,也可以是IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; #传递真实客户IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #传递真实客户IP
}
}
负载均衡:
需要定义在server之外
upstream backend {
server 127.0.0.1:8080 ;
server 127.0.0.1:9090 ;
ip_hash; }
upstream webservers {
server 172.18.144.23:4789 weight=1; #权重
server 172.18.144.23:5789 weight=1;
}
如果需要负载均衡和反向代理一起配合使用,需要:
upstream webservers {
server 172.18.144.23:4789 weight=1 max_fails=2 fail_timeout=2; #定义重试次数,超时时间
server 172.18.144.23:5789 weight=1 max_fails=2 fail_timeout=2; #定义重试次数,超
时时间
server 127.0.0.1:8080 backup #定义sorrypages
}
location / {
proxy_pass webservers ; 将upstream的负载均衡服务器组传递过来
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server { #当负载均衡的所有web servers都down掉了,这个就是定义sorrypage的。
listen 8080;
server_name localhost;
root /web/errorpages;
index index.html;
}
nginx的缓存
数据一般都是存在磁盘上的,所以最好用ssd,并做RAID0.
nginx的Web缓存服务主要由proxy_cache相关命令集和fastcgi_cache相关命令集构成,前者用于反向代理时对后端内容源服务器进行缓存,后者主要用语对FastCGI的动态程序进行缓存。此外,也可以使用第三方模块ngx_slowfs_cache来实现缓存服务器配置。在server外定义:
proxy_cache_path /nginx/cache/first levels=1:2 keys_zone=first:20m max_size=1g;
定义缓存的目录,目录级别,每个缓存区大小,整个目录最大值
然后在location里面定义
proxy_cache first; #如果定义为proxy_cache off为不启用缓存
-
- 开启nginx的目录列表功能(一般没用,只有做yum源才开启)
在nginx.conf主配置文件中http或location代码段中,配置一段代码即可实现
autoindex on; #自动显示目录
autoindex_exact_size off; #默认为on,显示出文件的确切大小,单位是bytes。
autoindex_localtime on; #默认为off,显示的文件时间为GMT时间。改为on后,显示的文件时间为文件的服务器时间