Nginx环境配置

Nginx环境搭建

listen       8889;        监听端口,如果配置多个server的时候,端口需要配置不一样
server_name  192.168.0.52;        # Nginx中的server_name指令主要用于配置基于名称的虚拟主机,server_name指令在接到请求后的匹配顺序

#配置启动进程(和CPU总核数一致)
worker_processes  1;
#charset koi8-r;

#一个nginx进程打开的最多文件描述数目,理论值应该是最多打开文件数(系统的值ulimit -u)建议与ulimit -u的值一致
worker_rlimit_nofile 65535;

#access_log  logs/host.access.log  main;

Linux 查看CPU总核数

# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l

Nginx 安装

编译
./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log  --http-log-path=/var/log/nginx/access.log  --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock  --user=nginx --group=nginx  --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre
Fastdfs模块添加编译
./configure --prefix=/usr/local/nginx --add-module=../fastdfs-nginx-module/src/ --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log  --http-log-path=/var/log/nginx/access.log  --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock  --user=nginx --group=nginx  --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre

http 服务配置

    NGNIX开启压缩:
        gzip on;
        gzip_buffers 4 8k;
        #压缩级别
        gzip_comp_level 2;
        #超过20压缩
        gzip_min_length 20;
        gzip_proxied off;
        gzip_types text/css;
        gzip_vary off;

    location / {    匹配路径
        root   html;    匹配当前路径的时候,会到这个html的文件夹下匹配
        index  index.html index.htm;    当没有指定主页的时候,默认选择这个指定的文件
        proxy_pass http://192.168.0.52:35840    代理路径,相当于转发
    }

    #error_page  404              /404.html;    出错的时候,跳转的页面

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}

Nginx Server 配置

server {
    listen       80;
    server_name  ethio-play.com;
    # 永久重定向配置 301
    rewrite ^(.*) http://www.ethio-play.com$1 permanent;
}
nginx自动匹配多级域名配置
server {
    listen       80;
    server_name  ~^(?<subdomain>\w+)\.yourdomain\.com$;
    root   html/$subdomain;
    index  index.html index.htm index.php;
    fastcgi_intercept_errors on;
    error_page  404      = /404.html;
    location / {
            # This is cool because no php is touched for static content.
            # include the "?$args" part so non-default permalinks doesn't
            # break when using query string
            try_files $uri $uri/ =404;
   }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  domain $subdomain;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny  all;
    }
}

配置反向代理

location ~ \.jsp$ {      配置JSP页面又tomcat处理
    proxy_pass http://localhost:8080;
}
location ~ \.(html|js|css|png|gif)$ {      配置一些静态资源有nginx处理
    root D:/software/developerTools/server/apache-tomcat-7.0.8/webapps/ROOT;
}

配置多个静态私服

* server外添加了一个upstream,而直接在proxy_pass里面直接用http://+upstream的名称来使用, upstream中的server元素必须要注意,不能加http://,但proxy_pass中必须加
upstream local_tomcat {
    server localhost:8080 weight=1;    配置多个私服,weight值越大请求得到的机会越大
    server localhost:9999 weight=5;    配置多个私服,weight值越大请求得到的机会越大
}
server{
    location / {
       proxy_pass http://local_tomcat;
    }
    #......其他省略
}

nginx正则表达式:

eg:
语法:location [=|~|~*|^~] /uri/ { … }
注意:
 ~* 前缀选择不区分大小写的匹配
 ~ 选择区分大小写的匹配
 例子:
location = / {
# 只匹配 / 查询。
[ configuration A ]
}

location / {
# 匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。
[ configuration B ]
}

location ^~ /images/ {
# 匹配任何已 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
[ configuration C ]
}

location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何已 gif、jpg 或 jpeg 结尾的请求。然而所有 /images/ 目录的请求将使用 Configuration C。
[ configuration D ]
}
Nginx正则表达式location匹配:
location ^~ /business/
{
    #root
    alias    D:\\apidoc\\portal\\business\\apidocs\\;
    #expires定义用户浏览器缓存的时间为7天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力
    #expires      7d;
}
root 和 alias区别:
eg:http://localhost:8079/business/index.html
alias也是用来设置文件资源路径的,他与root不同点就是在于如何解读跟location后面的URL参数
1.使用alias的时候,他会将URL中的business部分丢掉,请求路径会变为D:\\apidoc\\portal\\business\\apidocs\\index.html
2.使用root的时候,business不会丢弃掉,他会使用完整的url来匹配,请求路径会变为D:\\apidoc\\portal\\business\\apidocs\\business/index.html

Nginx 正则规则表达式

~      为区分大小写的匹配。
~*     不区分大小写的匹配(匹配firefox的正则同时匹配FireFox)。
!~     不匹配的
!~*    不匹配的

.     匹配除换行符以外的任意字符
\w     匹配字母或数字或下划线或汉字
\s     匹配任意的空白符
\d     匹配数字
\b     匹配单词的开始或结束
^     匹配字符串的开始
$     匹配字符串的结束

*     重复零次或更多次
+     重复一次或更多次
?     重复零次或一次
{n}     重复n次
{n,}     重复n次或更多次
{n,m}     重复n到m次
*?     重复任意次,但尽可能少重复
+?     重复1次或更多次,但尽可能少重复
??     重复0次或1次,但尽可能少重复
{n,m}?     重复n到m次,但尽可能少重复
{n,}?     重复n次以上,但尽可能少重复

\W     匹配任意不是字母,数字,下划线,汉字的字符
\S     匹配任意不是空白符的字符
\D     匹配任意非数字的字符
\B     匹配不是单词开头或结束的位置
[^x]     匹配除了x以外的任意字符
[^aeiou]     匹配除了aeiou这几个字母以外的任意字符

捕获     (exp)     匹配exp,并捕获文本到自动命名的组里
(?<name>exp)     匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp)     匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言     (?=exp)     匹配exp前面的位置
(?<=exp)     匹配exp后面的位置
(?!exp)     匹配后面跟的不是exp的位置
(?<!exp)     匹配前面不是exp的位置

Nginx命令:

cd nginx安装目录:
#运行          start nginx
#重启          nginx -s reload
#查看配置是否生效    nginx -t
#关闭服务      nginx -s stop

Author: Juntech
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Juntech !
评论
  TOC