nginx初级使用

nginx简介及特性

1.)nginx是一个高性能的web服务器和反向代理服务器,也是一个邮件代理服务器。具有高并发,开销小的特性。性能稳定,采用异步I/O处理机制。配置简洁。

2.)nginx特性:

基本功能:

静态资源的web服务器,能缓存打开的文件描述符

反向代理服务器,缓存、负载均衡

支持FastCGI

模块化,非DSO机制,过滤器gzip,SSI和图像大小调整等

支持SSL

扩展功能:

基于名称和IP做虚拟主机

支持keepalive

支持平滑配置更新或程序版本升级

定制访问日志,支持使用日志缓存以提高性能

支持url rewrite

支持路径别名

支持基于IP及用户的认证

支持速率限制,并发限制等

1.)nginx编译安装

安装nginx准备工作

创建nginx userand group

#  useradd -r -s /sbin/nologin nginx

安装nginx sslproxy 需要的开发依赖包

# yum installopenssl-devel pcre-devel

解压nginx

tar xf nginx-1.6.1.tar.gz

编译安装

# ./configure--prefix=/usr/local/nginx                 #指定nginx安装目录
--sbin-path=/usr/sbin/nginx                            #指定nginx管理命令目录,也可以不知道而后连接到/usr/sbin下
--conf-path=/etc/nginx/nginx.conf                      #指定nginx主配置文件存放位置
--error-log-path=/var/log/nginx/error.log              #指定nginx错误日志存放位置
--http-log-path=/var/log/nginx/access.log              #指定nginx访问日志存放位置
--pid-path=/var/run/nginx/nginx.pid                    #指定nginx的PID存放位置
--lock-path=/var/lock/nginx.lock                       #指定nginx锁文件存放位置
--user=nginx                                           #指定nginx的启动用户
--group=nginx                                          #指定nginx的用户组
--with-http_ssl_module                                 #指定nginx支持ssl模块
--with-http_flv_module                                 #指定nginx流媒体模块
--with-http_stub_status_module                         #开启nginx的状态查看模块
--with-http_gzip_static_module                         #开启nginx压缩功能模块
--http-client-body-temp-path=/var/tmp/nginx/client     #指定客户端请求主体临时存放目录
--http-proxy-temp-path=/var/tmp/nginx/proxy            #指定客户端请求数据,而后端服务器先加载到nginx代理服务器的目录
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi        #指定客户端请求的CGI相关的缓存存放路径
--http-uwsgi-temp-path==/var/tmp/nginx/uwsgi           #指定客户端请求python开发相关页面的缓存路径
--http-scgi-temp-path=/var/tmp/nginx/scgi              #scgi,对cgi的扩展
--with-pcre                                            #指定代理模块

# make &&make install

注释:nginx是异步服务器,如果客户端上传一个数据,并且nginx作为代理服务器,需要先将客户端上次的数据保存到nginx的指定存放路径,等客户端上传完成后才交给后端服务器。如果客户端下载一个文件,也需要在后端服务器加载到前端nginx代理服务器后才响应给客户。也就是为什么要指定上面几个temp-path的原因。

2.)创建编译安装时指定/var/tmp/nginx这个目录

mkdir -pv/var/tmp/nginx/

3.)启动nginx,检查端口

# nginx

4.)输入IP地址,访问测试页

5.)nginx编译安装的时候是没有提供启动控制脚本的

# /usr/sbin/nginx                                          #启动nginx
# kill `cat/var/run/nginx/nginx.pid`                       #停止nginx
# kill -HUP `cat/var/run/nginx/nginx.pid`                  #平滑重启nginx
# nginx -t -c/etc/nginx/nginx.conf                         #检查nginx配置文件

6.)提供Sys风格启动控制脚本,加入开机启动。脚本的提供是由rpm软件包安装生成的,需要修改一些参数就可以使用

# chkconfig --addnginx
# chkconfig nginxon
# chkconfig --listnginx
nginx             0:off  1:off  2:on   3:on   4:on   5:on   6:off

7.)正常情况下,nginx配置文件是没有语法高亮的,如果需要可以下载nginx.vim来修改

下载地址:http://www.vim.org/scripts/script.php?script_id=1886

# mkdir -pv.vim/syntax
mkdir: createddirectory `.vim‘
mkdir: createddirectory `.vim/syntax‘
# cp nginx.vim~/.vim/syntax/
# vim~/.vim/filetype.vim
auBufRead,BufNewFile /etc/nginx/* if &ft == ‘‘ | setfiletype nginx | endif

这次nginx.conf里面就是高亮显示的了。

8.)nginx配置文件

全局配置段
 
events{ 
…
}
 
http{
…
}

################################################################
 
全局配置段默认设置。
user  nginx;                                  #nginx的启动用户
worker_processes  1;                          #worker的进程数,一般是CPU的物理核心数
#error_log  logs/error.log;                   # 错误日志
#error_log  logs/error.log  notice;           #日志级别
#error_log  logs/error.log  info;
 
pid        /var/run/nginx/nginx.pid;          # nginx进程的PID
worker_rlimit_nofile65535;                    # worker进程可打开的文件数                
worker_rlimit_sigpending                      # 设定每个用户能够发往worker进程信号队列的数量
#ssl_enginedevice;                            # 在存在ssl硬件加速器上的服务器,指定锁使用的ssl硬件加速设备
#timer_resolutiontime;                        # 每次内核事件调用返回时,都会使用gettimeofday()来更新nginx缓存时钟,time_resolution用于定义每隔多久才会更新一次缓存时钟。
worker_priority-10;                           # 指定worker进程的nice值,值越小调度就会越优先
daemon on;                                    # 是否开启nginx调试功能,默认为on,off后可以将所有信息输出到控制台。
master_process on;                            # 是否以master/worker模式运行nginx,默认为on,调试时可以设置off以方便追踪。

9.)nginx提供了可以绑定进程运行在指定CPU上,就是所谓的CPU亲缘性。这是属于nginx优化的一部分,尽可能的避免进行来回活动在其他的核心上

查看主机CPU的核心数

# cat /proc/cpuinfo| grep ‘processor‘
processor  : 0
processor  : 1
processor  : 2
processor  : 3

在配置文件中绑定CPU。全局配置段

worker_cpu_affinity0001 0010 0100;

查看nginx绑定在哪个CPU上

# ps -eopid,args,psr | grep nginx
 1449 nginx: master process /usr/   0
 1450 nginx: worker process         0
 1451 nginx: worker process         1
 1452 nginx: worker process         2

可以看下我做的测试

下面是没绑定的时候nginx进程运行在哪个CPU上

下面是我绑定CPU后的测试

10.)events配置段

events{
#accept_mutex on;                             # 是否打开nginx负载均衡锁,此锁能够让多个worker进程轮流序列化的与新的客户端连接。功能默认是打开的。
#lock_file /path/to/lock.file;                # lock文件
#accept_mutex_delay#ns;                       # 一个worker进程为取得accept锁的等待时长
multi_sccept on;                              # 是否允许一次性响应多个用户请求,默认为off。
woker_connections ;                           #每个worker最大并发响应最大请求数,如果为代理服务器,应该是worker_rlimit_nofile数值的2倍。
}
 
http{
…     
server {                                      # 定义一个虚拟主机,nginx支持使用基于域名IP的虚拟主机。
 
        listen       80;                      #nginx监听的端口
        server_name  localhost;               #定义主机名,可以跟多个主机名。当nginx收到一个请求后,会取出首部的server值,而后跟其他server_name进行比较
                                              #比较方式:
                                              #精确匹配:www.test.com
                                              #左侧通配符匹配:*.test.com
                                              #右侧通配符匹配:www.*
                                              #正则表达式匹配:~^.*\.test\.com$
       server_name_hash_bucket_size 64;       # 为了实现快速查找,nginx使用hash表来保存主机名
 
        #charset koi8-r;
 
        #access_log  logs/host.access.log  main;
                                              #location匹配设置,根据用户请求指定URI来匹配指定的location以进行匹配
                                              #= :精确匹配,如果匹配到,则退出匹配。
                                              #~ :正则表达式匹配模式,匹配时区分字符大小写
                                              #~*:正则表达式匹配模式,匹配时忽略大小写
                                              #^~: URI的前半部分匹配,禁止正则表达式
                                              
 
 
        location / {
        root   html;                          # 文件路径定义
                                              # root html : 设置web资源路径,用户指定请求的网页存放路径
            index  index.html index.htm;      # 定义默认页面
        }
 
        #error_page  404              /404.html; # 错误页面重定向
                                                 #try_file $uri paht2 : 自左向右读取path所指定路径,在第一次找到即停止并返回,如果path不存在,则返回最后一个uri
 
        # redirect server error pages to thestatic page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }…
}
定义基于IP的虚拟主机
    server {
        listen       80;
        server_name  192.168.122.135;
        location / {
            root   html/web1;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
 
    server {
        listen       80;
        server_name  192.168.122.136;
        location / {
            root   html/web2;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

11.)创建网站跟目录

# mkdir /usr/local/nginx/html/{web1,web2}
# vim/usr/local/nginx/html/web1/index.html
# vim/usr/local/nginx/html/web2/index.html
# ifconfig eth1:0192.168.122.136/24
# ifconfig | grep‘inet addr‘
inetaddr:192.168.122.135 Bcast:192.168.122.255 Mask:255.255.255.0
inetaddr:192.168.122.136 Bcast:192.168.122.255 Mask:255.255.255.0

测试访问

12.)location 匹配设置

server {
        listen       80;
        server_name  192.168.122.135;
        location / {
            root   html/web1;
            index index.html index.htm;
        }
        location ^~/images/ {
            root   html/web3;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}
 
# mkdir/usr/local/nginx/html/web3
# vim/usr/local/nginx/html/web3/index.html

# mkdir/usr/local/nginx/html/web3/images
# cp/usr/local/nginx/html/web3/index.html /usr/local/nginx/html/web3/images/

第一个输入192.168.133.135/images没有匹配到是因为在web3下没有images这个目录,而roothtml/web3下指明了是应该访问的html/web3/images下的内容

13.)目录文件别名

location^~/images/ {
     alias  html/web3;
     index index.html index.htm;
}

# cp/usr/local/nginx/html/web3/images/index.html /usr/local/nginx/html/web3/

14.)错误页面重定向

    server {
        listen      80;
        server_name  192.168.122.135;
        error_page 404 /404.html;
#error_page 404 =200 /404.html;
…
}
# vim/usr/local/nginx/html/web1/404.html

15.)页面不存在,定向到首页去

location /newweb {
        root   html/web3;
        try_files $uri /index.html;
  }
# mkdir /usr/local/nginx/html/web3/newweb

16.)访问控制,我的无线网络是172网段的,虚拟机是192网段的,就禁止172网段进行访问

server {
     listen       80;
     server_name  192.168.122.135;
     allow 172.16.0.0/16;
     deny all;
…
}

17.)性能监控模块status

server {
        location /status {
            stub_status on;
            access_log   off;
            allow all;
            #deny all;  
        }
}

18.)用户认证模块

server {
…
        location /status {
            stub_status on;
            access_log   off;
            auth_basic "nginxstatus";
            auth_basic_user_file/etc/nginx/.nginxpass;
        }
       …
}
# htpasswd -c -m/etc/nginx/.nginxpass admin

19.)防盗链

server {  
location ~* \.(jpg|png|gif)$ {
            root html/web2;
            valid_referers none blockedwww.a.com *.a.com;
            if ($invalid_referer) {
                rewrite ^/http://www.a.com/403.html;
        }
}

上面的主机名已经不再是基于IP的虚拟主机,而是修改成了www.a.com

通过web1的主机访问测使用图片

通过www.a.com使用图片

日志已经显示给重定向了

20.)URL地址重写 rewrite

last: 一旦被当前规则匹配并重写后立即停止检查后续的其它rewrite的规则,而后通过重写后的规则重新发起请求
break: 一旦被当前规则匹配并重写后立即停止后续的其它rewrite的规则,而后继续由nginx进行后续操作
redirect: 返回302临时重定向
permanent: 返回301永久重定向
# mkdir/usr/local/nginx/html/web2/{jpg,images}
# mv 123.jpg/usr/local/nginx/html/web2/images/
server{
    …
        location /jpg/ {
            root html/web2;
            rewrite ^/jpg/(.*\.(jpg|gif|png))$/images/$1 last;
        }
…
}

正常的访问也是可以进行的

总结:基本配置只是做出了一部分示例,还有很多功能和参数没有介绍,官方网站上也是有中文的nginx的文档

时间: 2024-11-05 12:19:57

nginx初级使用的相关文章

nginx 初级总汇知识点

内容来源:https://www.coderknock.com/blog/2016/04/28/nginx.conf.html https://www.cnblogs.com/zero-zf/p/6907356.html http://blog.csdn.net/david_xtd/article/details/16967837 https://www.cnblogs.com/codingcloud/p/5095066.html   Nginx的启动,停止与重启 Nginx.config 参数

一:Nginx初级介绍

一:Nginx基础概述 1.Nginx简述 Nginx是一个开源且高性能.可靠的Http Web服务.代理服务. 开源: 直接获取源代码 高性能: 支持海量并发 可靠: 服务稳定 2.为什么选择Nginx服务 1.1 Nginx非常轻量 功能模块少 (源代码仅保留http与核心模块代码,其余不够核心代码会作为插件来安装) 代码模块化 (易读,便于二次开发,对于开发人员非常友好) 1.2 互联网公司都选择Nginx Nginx技术成熟,具备的功能是企业最常使用而且最需要的 适合当前主流架构趋势,

Nginx反向代理Tomcat,以及Session会话

一:Tomcat及JDK简介 1.)Tomcat是一个免费的web应用服务器服务器,国内很多大型站点也是采用Tomcat来构建的.Tomcat是apache基金会的一个核心项目,其运行环境需要JDK的支持,Tomcat都是基于某个版本的JDK平台所研发,版本不对称,会导致Tomcat启动失败. 2.)JDK于1996年开发第一个版本,JDK主要组建JVM,Applet,AWT等.JDK1.1的版本引入了JAR格式,用户打包Java程序代码.还引入了JDBC,Java通过驱动去连接数据库. 3.)

新书《Nginx实战:基于Lua语言的配置、开发与架构详解》开始发售

新书<Nginx实战:基于Lua语言的配置.开发与架构详解>开始发售https://item.jd.com/12487157.html#none <Nginx实战:基于Lua语言的配置.开发与架构详解>主要讲解了Nginx在反向代理和应用开发中的作用,阅读本书可以了解Nginx在互联网开发中扮演的多个角色,充分利用这些角色的各项功能有助于提升服务的整体性能.<Nginx实战:基于Lua语言的配置.开发与架构详解>所介绍的大部分功能是通过Nginx+Lua进行开发和配置的

向着高薪前进

技能点: 精通java:       书籍:深入理解java虚拟机,Effictive JAVA,Java编程思想. 目标:了解java比较偏向底层东西 熟悉算法:             书籍:算法导论,熟悉常用算法的分析与实现 玩转python            目标:能写个爬虫 玩转全文检索工具     初级目标:熟练使用Lucene 玩转Redis              初级目标:熟练使用Redis进行分布式缓存 玩转Linux              初级目标:熟练使用Lin

Nginx 之二:初级配置及优化

一:常用功能优化: 1.1:网络连接的优化: 只能在events模块设置,放置在一个时刻只有一个请求,而出现多个睡眠进程会被唤醒但只能有一个进程可获得请求的尴尬,如果不优化,在多进程的nginx会影响以部分性能. accept_mutex on; 1.2:设置是否允许同时接受多个网络连接: 只能在events模块设置,Nginx服务器的每个工作进程可以同时接受多个新的网络连接,但是需要在配置文件中配置,此指令默认为关闭,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个,配

【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器

一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器. 从上图可以看出:反向代理服务器位于网站机房,代理网站Web服务器接收Http请求,对请求进行转发. 1.2 反向代理的作用 ①保护网站安全:任何来自Internet的请求都必须先经过代理服务器: ②通

Nginx负载均衡的实现(初级)

不用nginx.conf,新建一个 fzjh.conf (名称自定义) 内容如下: user nobody; # 声明用户为nobody worker_processes 4; # 开启的nginx 进程数为4 events{ worker_connections 1024; # 最大并发数是1024个并发 } http{ upstream myproject{ # 服务器待选列表.如果某个服务器崩溃,自动移除 server ip:port; server ip:prot; } Server{

Nginx 学习--初级篇,Nginx 认识与安装

阅读目录: 1. Nginx 认识以及作用 2. Nginx 基本CentOs环境下安装步骤说明 <一> Nginx基本认识以及作用  Nginx官网:http://nginx.org/ Nginx 是由俄国人开发,一款支持Http请求高性能,轻量级Http服务器(engine x)/反向代理服务器,及电子邮件(IMAP/POP3)代理服务器. Nginx作为一款Http服务器,意味这它是运行在服务器之上的,是可以绑定服务器的IP,并且可以监听TCP的端口,接受来自网络客户端(一般来说是IE,