Nginx配置解读,虚拟主机,https配置,反向代理,https重定向

1. 安装Nginx(源码编译安装,平台为rhel6.5.x86_64)

1.1下载源码包并解压(尽量选择稳定版本)

[root@lockey ~]# wget http://nginx.org/download/nginx-1.12.1.tar.gz
[root@lockey ~]# tar zxvf nginx-1.12.1.tar.gz

1.2 编译前的配置

编译安装nginx的时候为了安全起见需要在源代码文件中把版本号注释掉,这是为了防止针对特定版本的恶意攻击

[root@lockey ~]#vim /root/nginx-1.12.1/src/core/nginx.h
#define NGINX_VER          "nginx/" // NGINX_VERSION

关闭编译时的调试模式,这样编译得到的源码包的大小会减少很多

 [root@lockey ~]#cd /root/nginx-1.12.1/auto/cc
 [root@lockey ~]#vim gcc
  # debug
  #CFLAGS="$CFLAGS -g"

配置

./configure --user=www --group=www --prefix=/usr/local/nginx --with-file-aio  --with-threads --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module

参数解释:

#--prefix=/usr/local/nginx指定安装路径

#--with-http_stub_status_module开启Nginx自带状态检测模块

#--with-http_ssl_module开启https模块

#--with-file-aio 开启文件AIO支持

#--with-threads 启用线程池支持

配置过程中可能出现的问题以及解决:

缺少PCRE库的支持
解决:yum install pcre-devel -y

缺少openssl支持:
解决:yum install openssl-devel -y

1.3 编译和安装

[root@lockey nginx-1.12.1]# make && make install

1.4 服务的启动以及测试

注意:一般对配置文件/usr/local/nginx/conf/nginx.conf做了修改后需要首先运行以下命令检查配置是否有语法错误然后再进行服务的停启动作:

/usr/local/nginx/sbin/./nginx -t

 服务启动方法一:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
 启动方法二:cd /usr/local/nginx/sbin && ./nginx

测试:在浏览器中输入http://ip:80能够看到Nginx的欢迎界面则基本的配置就算是成功了

 关于服务的停止/usr/local/nginx/sbin/nginx -s stop
 服务的配置重新加载:/usr/local/nginx/sbin/nginx -s reload

2. 配置文件基本项解读

user  www www;
#运行的用户和组

worker_processes  2;
worker_cpu_affinity 01 10;#两核配置如此
#将进行数和CPU做绑定,可以通过lscpu查看CPU的核数
#worker_cpu_affinity 001 010 011 100;四核配置如此
#要注意 cpu 不均衡的问题,原因很多的:磁盘、文件I/O等

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  65535;
}
#连接量修改之后需要修改系统限制配置文件 vim /etc/security/limits.conf,添加内容如下:
#nginx   -   nofile    65535
http {
    #设定mime类型,类型由mime.type文件定义
    include    mime.types;
    default_type  application/octet-stream;
    #设定日志格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
    #对于普通应用,必须设为 on,
    #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
    #以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    sendfile     on;
    #tcp_nopush     on;

    #连接超时时间
    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay     on;

    #开启gzip压缩
    gzip  on;
    gzip_disable "MSIE [1-6].";

    #设定请求缓冲
    client_header_buffer_size    128k;
    large_client_header_buffers  4 128k;


    #设定虚拟主机配置
    server {
        #侦听80端口
        listen    80;
        #定义使用 www.nginx.cn访问
        server_name  www.nginx.cn;

        #定义服务器的默认网站根目录位置
        root html;

        #设定本虚拟主机的访问日志
        access_log  logs/nginx.access.log  main;

        #默认请求
        location / {

            #定义首页索引文件的名称
            index index.php index.html index.htm;   

        }

        # 定义错误提示页面
        error_page   500 502 503 504 /50x.html;
        location = /50x.html {
        }

        #静态文件,nginx自己处理
        location ~ ^/(images|javascript|js|css|flash|media|static)/ {

            #过期30天,静态文件不怎么更新,过期可以设大一点,
            #如果频繁更新,则可以设置得小一点。
            expires 30d;
        }

        #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
        location ~ .php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include fastcgi_params;
        }

        #禁止访问 .htxxx 文件
            location ~ /.ht {
            deny all;
        }

    }
}

3. Nginx配置虚拟主机

虚拟主机是将一台服务器主机分成一台台“虚拟”的主机,每台虚拟主机都可以具有独立的域名,具有完整的Intemet服务器功能(WWW、FTP、Email等),同一台主机上的虚拟主机之间是完全独立的。从网站访问者来看,每一台虚拟主机和一台独立的主机完全一样。

利用虚拟主机,不必为每个要运行的网站提供一台单独的Nginx服务器或单独运行一组Nginx进程。虚拟主机提供了在同一台服务器、同一组Nginx进程上运行多个网站的功能。
Nginx实现虚拟主机有以下三种方法

Nginx基于IP的虚拟主机配置:同一台主机的不同ip对应不同的网站,ip占位在server_name
Nginx基于端口的虚拟主机配置:同一主机的不同端口对应不同网站
Nginx基于域名的虚拟主机配置:每一个server_name对应一个网站的发布目录

基于域名的虚拟主机配置示例如下:
vim /usr/local/nginx/conf/nginx.conf

 server {
 #虚拟主机 1
      listen       80;
      server_name  www.lockey.com;
      #主机名称,也即域名
      #charset koi8-r;

      #access_log  logs/host.access.log  main;

      location / {
          root   /lockey;
          #虚拟主机的发布目录
          index index.html index.htm;
      }
  }

  server {
  #虚拟主机2
      listen       80;
      server_name  www.halo.com;
      #虚拟主机2的主机名,也即域名
      #charset koi8-r;

      #access_log  logs/host.access.log  main;

      location / {
          root   /halo;
          #虚拟主机2的网站发布目录
          index index.html index.htm;
      }
  }

配置完成后需要重载配置,然后进行访问:

/usr/local/nginx/sbin/nginx -s reload

4. Nginx支持https配置

步骤1:生成密钥

[root@server653 ~]# cd /etc/pki/tls/certs/
[root@server653 certs]# make cert.pem
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:shaanxi
Locality Name (eg, city) [Default City]:xi'an
Organization Name (eg, company) [Default Company Ltd]:lockey
Organizational Unit Name (eg, section) []:linux
Common Name (eg, your name or your server's hostname) []:server653
Email Address []:lockey@123.com
[root@server653 certs]# ll cert.pem
-rw-------. 1 root root 3092 9月  13 10:47 cert.pem
[root@server653 certs]# cp cert.pem /usr/local/nginx/conf/

步骤2:配置nginx支持https

[root@server653 ~]# vim /usr/local/nginx/conf/nginx.conf

 # HTTPS server
    server {
        listen       443 ssl;
        server_name  www.lockey.com;###指定要进行加密的域

        ssl_certificate      cert.pem;#####认证与加密文件
        ssl_certificate_key  cert.pem;#####

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

配置完成后需要重载配置,然后进行访问(https://www.lockey.com):

/usr/local/nginx/sbin/nginx -s reload

5. Nginx访问认证配置

首先生成认证文件(注意路径)

[root@server653 conf]# touch passwd.db
[root@server653 conf]# htpasswd -c -b passwd.db lockey lockey
Adding password for user lockey

然后配置需要认证的网站,以www.lockey.com为例:

server {
      listen       80;
      server_name  www.lockey.com;

      #charset koi8-r;

      #access_log  logs/host.access.log  main;

      location / {
          root   html;
          auth_basic 'Welcome to lockey.com!';
    #认证欢迎语
          auth_basic_user_file /usr/local/nginx/conf/passwd.db;
    #认证文件的存储位置           
    index index.php index.html index.htm;
      }

配置完成后需要重载配置,然后进行访问(https://www.lockey.com),会提示需要输入用户名和密码的:

/usr/local/nginx/sbin/nginx -s reload

6.反向代理

注意172.25.22.1,172.25.22.2上边都配置了网络服务并做了域名解析

upstream lockey{
server 172.25.22.1:80 weight=2;
server 172.25.22.2:80;
server 127.0.0.1:80 backup;#作为一个无法提供服务的友好提示界面
#可以加权重weight=number;
#算法默认是轮询,还有ip_hash等
}


location / {
       proxy_pass http://lockey;#设置代理访问查询,和upstream lockey对应
       #root   html;
    #auth_basic 'Welcome to lockey.com!';
    #auth_basic_user_file /usr/local/nginx/conf/passwd.db;
    #index index.php index.html index.htm;
}

配置完成后需要重载配置,然后进行访问测试,可以看到访问到的内容会不停的变化:

/usr/local/nginx/sbin/nginx -s reload

7. Nginx重定向(Nginx https重定向)

server {
        listen       80;
        server_name  www.halo.com;
        rewrite ^(.*)$ https://www.halo.com$1 permanent;#redirect分为
    location / {
      root   /halo;
      index  index.html index.htm;
         }
    }

8. 资源重定向

以存储在本地的图片资源通过网络获取为例:

location /images {
                alias /images;#当在网页中加载一张图片时可以这样写<img src="/images/pic.png">,实际获取
            的是根目录下的images目录中的图片,而不是网站根目录下的。
            }
发布了330 篇原创文章 · 获赞 489 · 访问量 56万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览