nginx配置conf大全

Linux IT敢客 9个月前 (01-27) 8195次浏览 已收录 3个评论 扫描二维码

Nginx 是一款轻量级Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个 BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx 网站用户有:百度、京东新浪网易腾讯淘宝等。总体而言,可以将 Nginx 的功能分为五大类:1、静态 HTTP 服务器;2、反向代理服务器;3、负载均衡;4、虚拟主机;5、FastCGI 扩展(PHP,Python,Perl)。1、静态 HTTP 服务器

首先,Nginx 是一个 HTTP 服务器,可以将服务器上的静态文件(如 HTML、图片)通过 HTTP 协议展现给客户端。

配置:

server {  
    listen80; # 端口号  
    location / {  
        root /usr/share/nginx/html; # 静态文件路径  
    }  
}

2、反向代理服务器

什么是反向代理?

客户端本来可以直接通过 HTTP 协议访问某网站应用服务器,网站管理员可以在中间加上一个 Nginx,客户端请求 Nginx,Nginx 请求应用服务器,然后将结果返回给客户端,此时 Nginx 就是反向代理服务器。最常见的就是代理 Tomcat 应用程序

配置:

server {  
    listen80;  
    location / {  
        proxy_pass http://192.168.20.1:8080; # 应用服务器 HTTP 地址  
    }  
}

既然服务器可以直接 HTTP 访问,为什么要在中间加上一个反向代理,不是多此一举吗?反向代理有什么作用?继续往下看,下面的负载均衡、虚拟主机等,都基于反向代理实现,当然反向代理的功能也不仅仅是这些。

3、负载均衡

当网站访问量非常大,网站站长开心赚钱的同时,也摊上事儿了。因为网站越来越慢,一台服务器已经不够用了。于是将同一个应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。同时带来的好处是,其中一台服务器万一挂了,只要还有其他服务器正常运行,就不会影响用户使用。

Nginx 可以通过反向代理来实现负载均衡。

配置

upstream myapp {  
    server192.168.20.1:8080; # 应用服务器 1  
    server192.168.20.2:8080; # 应用服务器 2  
}  
server {  
    listen80;  
    location / {  
        proxy_pass http://myapp;  
    }  
}

 

以上配置会将请求轮询分配到应用服务器,也就是一个客户端的多次请求,有可能会由多台不同的服务器处理。可以通过 ip-hash 的方式,根据客户端 ip 地址的 hash 值将请求分配给固定的某一个服务器处理。

配置:

upstream myapp {  
    ip_hash; # 根据客户端 IP 地址 Hash 值将请求分配给固定的一个服务器处理  
    server192.168.20.1:8080;  
    server192.168.20.2:8080;  
}  
server {  
    listen80;  
    location / {  
        proxy_pass http://myapp;  
    }  
}

另外,服务器的硬件配置可能有好有差,想把大部分请求分配给好的服务器,把少量请求分配给差的服务器,可以通过 weight 来控制。 

配置:

upstream myapp {  
    server192.168.20.1:8080weight=3; # 该服务器处理 3/4 请求  
    server192.168.20.2:8080; # weight 默认为 1,该服务器处理 1/4 请求  
}  
server {  
    listen80;  
    location / {  
        proxy_pass http://myapp;  
    }  
}

  4、虚拟主机

有的网站访问量大,需要负载均衡。然而并不是所有网站都如此出色,有的网站,由于访问量太小,需要节省成本,将多个网站部署在同一台服务器上。

例如将 www.aaa.com 和 www.bbb.com 两个网站部署在同一台服务器上,两个域名解析到同一个 IP 地址,但是用户通过两个域名却可以打开两个完全不同的网站,互相不影响,就像访问两个服务器一样,所以叫两个虚拟主机。

配置:

server {  
    listen80default_server;  
    server_name _;  
    return444; # 过滤其他域名的请求,返回 444 状态码  
}  
server {  
    listen80;  
    server_name www.aaa.com; # www.aaa.com 域名  
    location / {  
        proxy_pass http://localhost:8080; # 对应端口号 8080  
    }  
}  
server {  
    listen80;  
    server_name www.bbb.com; # www.bbb.com 域名  
    location / {  
        proxy_pass http://localhost:8081; # 对应端口号 8081  
    }  
}

在服务器 8080 和 8081 分别开了一个应用,客户端通过不同的域名访问,根据 server_name 可以反向代理到对应的应用服务器。

虚拟主机的原理是通过 HTTP 请求头中的 Host 是否匹配 server_name 来实现的,有兴趣的同学可以研究一下 HTTP 协议。

另外,server_name 配置还可以过滤有人恶意将某些域名指向你的主机服务器。

5、FastCGI

Nginx 本身不支持PHP等语言,但是它可以通过 FastCGI 来将请求扔给某些语言或框架处理(例如 PHP、Python、Perl)。

server {  
    listen80;  
    location ~ \.php$ {  
        include fastcgi_params;  
        fastcgi_param SCRIPT_FILENAME /PHP 文件路径$fastcgi_script_name; # PHP 文件路径  
        fastcgi_pass127.0.0.1:9000; # PHP-FPM 地址和端口号  
        # 另一种方式:fastcgi_pass unix:/var/run/php5-fpm.sock;  
    }  
}

配置中将.php 结尾的请求通过 FashCGI 交给 PHP-FPM 处理,PHP-FPM 是 PHP 的一个 FastCGI 管理器。
关于 Nginx 的配置详解,可以参考之前的文章 ngnix 安装及配置详解 https://www.itgank.com/archives/2165 

        实例讲解:
1、配置主文件 nginx.conf,内容如下

user  www;

worker_processes auto;

error_log  /home/wwwlogs/nginx_error.log  crit;

pid        /usr/local/nginx/logs/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

events
    {
        use epoll;
        worker_connections 51200;
        multi_accept on;
    }

http
    {
        include       mime.types;
        default_type  application/octet-stream;

        server_names_hash_bucket_size 128;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 50m;

        sendfile   on;
        tcp_nopush off;

        keepalive_timeout 60;

        tcp_nodelay on;
	include fastcgi_params;

        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
        gzip_vary on;
        gzip_proxied   expired no-cache no-store private auth;
        gzip_disable   "MSIE [1-6]\.";

        #limit_conn_zone $binary_remote_addr zone=perip:10m;
        ##If enable limit_conn_zone,add "limit_conn perip 10;" to server section.

        server_tokens off;
        access_log off;

	include vhost/*.conf;
	}

我们在 nginx.conf 中配置基本的全局配置文件,然后其他功能的配置文件放在 vhost 文件下面。
2、配置网站 www.xxx.com(静态网站),可以以 www.xxx.com.conf 命名,放在 vhost 文件夹下面,内容如下(如果有 php 加载,fastcgi 加载 php 代理放在 www.conf 文件中)

server {
    listen       80;
    server_name  www.xxx.com;
    root /data/www.xxx.com;
    index   index.html index.htm index.php;
#    include naxsi_core.rules;

    #charset koi8-r;
    access_log       /data/logs/nginx/www.xxx.com_access.log ;
    error_log        /data/logs/nginx/www.xxx.com_error.log        warn;

    include conf.d/misc.security.conf;
    location ~ \.(js|png|jpg|pdf|jpeg|gif|css)$ {
        access_log off;
        expires 3d;
        if (!-f  $request_filename) {
            rewrite ^([^\.]*)/data/avatar/([0-9]+)/([0-9]+)/([0-9]+)/([0-9]+)_avatar_([a-z]+).jpg$ $1/images/noavatar_$6.gif last;
            return 404;
        }
    }
    include fpm.d/www.conf;
}

3、配置子域名的 aaa.xxx.com(静态网站),可以以 aaa.xxx.com.conf 命名,放在 vhosts 文件夹下面,内容如下(如果有 php 加载,fastcgi 加载 php 代理放在 aaa.conf 文件中)

server {
    listen       80;
    server_name  aaa.xxx.com;
    root /data/aaa.xxx.com;
    index   index.html index.htm index.php;

    #charset koi8-r;
    access_log       /data/logs/nginx/aaa.xxx.com_access.log ;
    error_log        /data/logs/nginx/aaa.xxx.com_error.log        warn;

    include conf.d/misc.security.conf;

    location ~ \.(js|png|jpg|pdf|jpeg|gif|css)$ {
        access_log off;
        expires 3d;
        if (!-f  $request_filename) {
            rewrite ^([^\.]*)/data/avatar/([0-9]+)/([0-9]+)/([0-9]+)/([0-9]+)_avatar_([a-z]+).jpg$ $1/images/noavatar_$6.gif last;
            return 404;
        }
    }
    include fpm.d/aaa.conf;
}

4、配置不带 www 跳转到带 www 上面,可以以 aaa.com.conf 命名,放在 vhosts 文件夹下面,内容如下

server {
    listen       80;
    server_name  aaa.com;
    root /data/www.aaa.com;
    index   index.html index.htm index.php;
#    include naxsi_core.rules;

    #charset koi8-r;
    access_log       /data/logs/nginx/www.aaa.com_access.log ;
    error_log        /data/logs/nginx/www.aaa.com_error.log        warn;

    include conf.d/misc.security.conf;

    location / {
	rewrite (.*) http://www.aaa.com;
    }
}

5、配置 www.bbb.com 和 bbb.com 都跳转到 www.aaa.com,可以以 bbb.com.conf 命名,放在 vhosts 文件夹下面,内容如下

server {
    listen       80;
    server_name  bbb.com www.bbb.com;
    root /var/lib/docker/data/www.aaa.com;
    index   index.html index.htm index.php;
#    include naxsi_core.rules;
    #charset koi8-r;
    access_log       /data/logs/nginx/www.bbb.com_access.log ;
    error_log        /data/logs/nginx/www.bbb.com_error.log        warn;
    include conf.d/misc.security.conf;
    rewrite ^/(.*)$ http://www.aaa.com/$1 permanent;
}

6、配置 www.ccc.com 访问代理 tomcat 的文件,可以以 tomcat_xxx.conf 命名,放在 vhosts 文件夹下面,内容如下

server {
        server_name ccc.com www.ccc.com;
        access_log       /data/logs/tomcat_xxx/www.ccc.com_access.log ;
        error_log        /data/logs/tomcat_xxx/www.ccc.com_error.log        warn;
        location / {
                proxy_pass http://127.0.0.1:8080;
	#	proxy_ignore_client_abort on;
        }
}

7、配置 80 端口跳转 443 端口,以 http://www.ddd.com 跳转 https://www.ddd.com,可以以 www.ddd.com.443.conf 命名,放在 vhosts 文件夹下面,内容如下(其中包含了 fastcgi 代理 php )

server {
    listen 80;
    server_name www.ddd.com;
    rewrite ^(.*)$ https://${server_name}$1 permanent; }

server {
    listen 443;
    server_name www.ddd.com;
    ssl on;
    ssl_certificate   /etc/pki/CA/certs/214321311540956.pem;
    ssl_certificate_key  /etc/pki/CA/certs/214321311540956.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;   
    index index.php index.htm index.html;
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;

    location ~ \.php {
    root /data/www/html;
    fastcgi_pass unix:/tmp/php-cgi.sock;
    fastcgi_index index.php;
    include   fastcgi.conf;    set $path_info "";    set $fastcgi_script_name_new $fastcgi_script_name;        if ($fastcgi_script_name ~*   "^(.+\.php)(/.+)$"  ) {            set $fastcgi_script_name_new $1;        set $path_info $2;
    }

    fastcgi_param   SCRIPT_FILENAME   $document_root$fastcgi_script_name_new;
    fastcgi_param   SCRIPT_NAME   $fastcgi_script_name_new;                    
    fastcgi_param   PATH_INFO $path_info;
    }

    location / {
    root /data/www/html;
    index index.php index.html index.htm;    if (!-e  $request_filename){
        rewrite ^(.*)$ /index.php$1 last;
    }
  }
}

8、其他 dedecms 配置文件,dedecms.conf,内容如下

location / {
rewrite "^/index.html$" /index.php last;
rewrite "^/list-([0-9]+)\.html$" /plus/list.php?tid=$1 last;
rewrite "^/list-([0-9]+)-([0-9]+)-([0-9]+)\.html$" /plus/list.php?tid=$1&totalresult=$2&PageNo=$3 last;
rewrite "^/view-([0-9]+)-1\.html$" /plus/view.php?arcID=$1 last;
rewrite "^/view-([0-9]+)-([0-9]+)\.html$" /plus/view.php?aid=$1&pageno=$2 last;
rewrite "^/tags.html$" /tags.php last;
rewrite "^/tag-([0-9]+)-([0-9]+)\.html$" /tags.php?/$1/$2/ last;
break;
}

9、其他常见的包括 discuz,redis,wordpress,wsgi 等等许多配置文件,就不一一列举了,可以下载附件查看nginx 配置 conf 大全欢迎指出不足之处。
文中附件下载地址

nginx 配置 conf 大全此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“微信验证码”,获取验证码。在微信里搜索“IT 敢客”或者“itgank_com”或者微信扫描右侧二维码都可以关注本站微信公众号。


IT 敢客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:nginx 配置 conf 大全
喜欢 (156)
[313176056@qq.com]
分享 (0)
IT敢客
关于作者:
“我所做的一切都是为了方便我的生活~~~“
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(3)个小伙伴在吐槽
  1. 许
    本博主再次更新两点重要说明:1、让www.aaa.com的任意请求都跳转到首页,也就是www.aaa.com/xxx/xx等都打开为www.aaa.com/index.html,这个功能有助于网站升级维护,让首页提示!配置如下:server { server_name www.aaa.com; root /data/www; location / { rewrite ^(.*)$ /index.html break; }}2、在域名方式访问的时候,增加一下,可以放回域名而不是localhost或者127.0.0.1 proxy_set_header Host $host; proxy_set_header Port $server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
    IT敢客2018-02-26 15:58 回复 Windows 8.1 | Chrome 55.0.2883.75
  2. 比较详细了!不过还要收费是干啥子了๛ก(ー̀ωー́ก) 
    求资源2018-01-28 11:30 回复 Linux | Chrome 40.0.2214.109
    • IT敢客
      其实是为了测试这个功能而已,哈哈,收费不贵,另外这个资源用的人应该都会!
      IT敢客2018-01-28 11:33 回复 Linux | Chrome 55.0.2883.91