Nginx入门学习
2018-04-05 本文已影响0人
原来不语
nginx的优点:
nginx是一款自由、开源的、高性能HTTP服务器和反向代理服务器;是一个IMAP、POP3、SMTP代理服务器;
比apache占用更少的内存及资源。抗并发,nginx处理请求是异步非阻塞的,提供反向代理,负载均衡,支持rewrite,而且稳定性也比较高。
安装
先安装pcre(nginx用来支持rewrite的支持库)
https://ftp.pcre.org/pub/pcre/
tar -xzvf pcre-X(下载的版本)
cd pcre-XX
./configure
make && make install
安装nginx wget http://nginx.org/download/nginx-1.6.2.tar.gz
tar -xzvf nginx-XX
cd nginx-XX
./configure --prefix = /soft/nginx
//指定nginx的安装目录。默认/usr/local/nginx
make && make install
启动关闭nginx
检查配置文件是否正确
/usr/local/nginx/sbin/nginx -t
./sbin/nginx -V可以查看到编译选项
启动 、关闭
./sbin/nginx #默认配置文件 conf/nginx.conf -c 指定
./sbin/nginx -s stop
pkill nginx
重启(建议reload而不是重启)
./sbin/nginx -s reload
sudo service nginx
或者kill -HUP cat /usr/loacl/nginxs/logs/nginx.pid
nginx的配置文件
切换到
/usr/local/nginx/sbin/nginx
vim conf/nginx.conf
#user nobody 使用指定用户
#worker_process 2; #使用的worker进程数,master不在此列,同cpu内核数
#worker_cpu_affinity 0001 0010 #如果 worker_processes为2以上要设置
如果上边设置的为4 则下边为 0001 0010 0100 1000
#error_log logs/e.log #错误日志文件默认在logs里
#error_log logs/e.log notice ;日志文件与日志级别[debug | info | notice | warn | error | crit |alert | emerg]
#pid logs/nginx.pid #存放进程pid
events{
use epoll [kqueue|epoll|select|poll] #处理连接方法
#epoll 是多路复用IO(I/O Multiplexing)中的一种
#仅用于linux2.6内核以上,可以大大提高nginx的性能
#worker_connections 1024; 每个worker最大连接数,默认为1024
}
http{
#log_format main
# access_log访问日志
server{
listen 80; 监听80端口
(listen 81; 这样还会监听81端口)
server_name www.nginx.cn #监听域名 定义服务器的默认网站根目录位置
access_log logs/nginx.access.log main #设定本虚拟访问主机的访问日志,采用main格式
client_max_body_size 10m ;#最大报文,默认1M
location {
root html;
#定义首页索引文件的名称
index index.php index.html index.html;
}
#定义错误提示页面
error_page 500 502 503 504 /50.html
location = /50x.html{
root html;
}
}
}
1.如果只有一个server、server_name 可以任意起(可以为IP/域名/任何字符串)则不论用什么访问(IP/域名/字符串),无论server_name是否匹配,都匹配到此server
2、如果有多个server,如果server_name可以匹配到任一个server的server_name,则使用此server,否则匹配到第一个server块,不论server_name是否匹配!
Nginx配置虚拟主机
server{
listen 80;
access_log logs/xxx.log [(日志格式)]为每个网站设定独立的日志记录
server_name xxx.com
}
location / {
root / html/xxxxx(根目录,可以相对目录可以绝对目录)
index index.php index.html;首页
}
location {
虚拟主机对PHP的解析
}
location 基本语法
location 基本语法 [=|~|~*|]/uri/{.....}
=严格匹配
~为区分大小写匹配
~*为不区分大小写匹配
.......
location = /{
#A只配/询。
}
location/{
#B匹配任何查询,因为所有请求都已/开头。但是则表达式规则和长的块规则配被优先利用和匹配
location ^~/images/ {
#C 配任何以/images/ 开头的任何查询并且停搜索,
location~*.(gif l jpg l jpeg)$ {
#D 匹配任何以gif、jpg jpeg结尾请求
#但是所有images/ 目录的请求将由ConfigurationC处理
URL重写 用 rewrite(两种重写方法)
image.pngnginx支持简单的if语句,
if ( !-e $request_filename){
rewrite (.*)$ /index.php/$1
}
将地址栏上所有的东西,都捕捉到然后重写到index.php
将 /auth/login
http://index.php ?/auth/login
server{
listen 80;
access_log logs/xxx.log [(日志格式)]为每个网站设定独立的日志记录
server_name xxx.com
}
location / {
root / html/xxxxx(根目录,可以相对目录可以绝对目录)
index index.php index.html;首页
try_files $uri/index.php?uri;
}
反向代理
用nginx做反向代理用proxy_pass,nginx反向代理不用自己处理图片的相关请求,
而是把图片的请求转发给apache来处理。
image.png
配置如下 (响应图片请求 )
upstream name_hosts{
server 192.168.123.1:80 #此处是是一个IP:port格式要转到的ip
}
location ~ \.(jpg | jpeg | png | gif)${
proxy_set_header Host www.new.com; #要转 到的域名
proxy_pass HTTP://IP:port; #要转到的ip
}
image.png
但是经过代理服务器转发后,真实的服务器就获取不到用户的真实ip,
所以在使用代理服务器时,需要代理服务器将用户的真实IP转发到真实的服务器上
location ~ \.(jpg | jpeg | png | gif)${
proxy_pass HTTP://IP:port;
proxy_set_header X-Forwarded-For $remote_addr;#$remote_addr用户的真实IP
}
nginx的集群和负载均衡
upstream {}模块 把多台服务器加入到一个组然后 memcache_pass, fastcg_pass, proxy_pass ==>upstream组
#例如这个放置图片的服务器
配置upstream
upstream imageserver{
server IP:port weight=1 max_fails=2 fail_timeout=30s;
server IP:port weight=1 max_fails=2 fail_timeout=30s;
}
下游调用
location ~ \.(jpg | jpeg | png | gif){
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://imageserver;
}
默认的负载均衡的算法:
设置计数器,轮流请求N台服务器
可以安装第三方模块,来利用不同参数吧请求均衡到不同的服务器上
如基于cookie值区别用户做负载均衡(nginx sticky)模块
基于URL利用一致性哈希算法做均衡(nginxHttpUpstreamConsistentHash模块)
基于IP做负载均衡等。
负载均衡的算法要好好设计,如果设计不当可能会丢掉用户的session!!!!
nginx的日志文件
image.png个性化日志输出重写log_format newrule,然后将access_log后的main替换为newrule