Nginx基本用法篇二

一、nginx安装

1. yum 安装

yum install nginx

 2.编译安装

    useradd nginx -r -s /sbin/nologin 
  wget http://nginx.org/download/nginx-1.12.2.tar.gz
  tar xf nginx-1.12.2.tar.gz
  cd nginx-1.12.2
  ./configure –prefix=/usr/local/nginx –conf-path=/etc/nginx/nginx.conf –error-log-path=/var/log/nginx/error.log –http-log-path=/var/log/nginx/access.log \
–pid-path=/var/run/nginx.pid –lock-path=/var/run/nginx.lock –user=nginx –group=nginx –with-http_ssl_module –with-http_v2_module –with-http_dav_module \
–with-http_stub_status_module –with-threads –with-file-aio make && make install

 

二、nginx虚拟主机三种实现方式

虚拟主机的实现方式有三种。

    基于多ip
    基于多端口
    基于多虚拟主机名

1. 安装nginx 

[root@localhost ~]# yum install nginx

 方案1-基于多ip

# 查看ip信息
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:b3:02:e2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.46.151/24 brd 192.168.46.255 scope global ens33
    valid_lft forever preferred_lft forever
    inet6 fe80::df7e:1d50:d858:d479/64 scope link
    valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:b3:02:ec brd ff:ff:ff:ff:ff:ff
    inet 172.18.46.151/16 brd 172.18.255.255 scope global ens37
    valid_lft forever preferred_lft forever
    inet6 fe80::f0f5:59a9:d186:e6a7/64 scope link
    valid_lft forever preferred_lft forever

# 构建主页
[root@localhost nginx]# pwd
/usr/share/nginx
[root@localhost nginx]# mkdir multi_ip_1
[root@localhost nginx]# mkdir multi_ip_2
[root@localhost nginx]# echo multi_ip_1 >> multi_ip_1/index.html
[root@localhost nginx]# echo multi_ip_2 >> multi_ip_2/index.html

# 编辑配置文件
[root@localhost ~]# cd /etc/nginx/conf.d/
[root@localhost conf.d]# ls
[root@localhost conf.d]# vim multi_ip.conf
[root@localhost conf.d]# cat multi_ip.conf
server    {
    listen 172.18.46.151:80;
    root   /usr/share/nginx/multi_ip_1;
}
server    {
    listen 192.168.46.151:80;
    root   /usr/share/nginx/multi_ip_2;
}

# 测试下
[root@localhost conf.d]# systemctl restart nginx
[root@localhost conf.d]# curl 172.18.46.151
multi_ip_1
[root@localhost conf.d]# curl 192.168.46.151
multi_ip_2

方案2-基于多port

# 编辑配置文件
[root@localhost conf.d]# cp multi_ip.conf multi_port.conf
[root@localhost conf.d]# vim multi_port.conf
[root@localhost conf.d]# cat multi_port.conf
server    {
    listen 172.18.46.151:81;
    root   /usr/share/nginx/multi_port_1;
}
server    {
    listen 172.18.46.151:82;
    root   /usr/share/nginx/multi_port_2;
}

# 构建主页

[root@localhost conf.d]# cd /usr/share/nginx/
[root@localhost nginx]# ls
html  modules  multi_ip_1  multi_ip_2
[root@localhost nginx]# mkdir multi_port_1
[root@localhost nginx]# mkdir multi_port_2
[root@localhost nginx]# echo "multi_port_1" > multi_port_1/index.html
[root@localhost nginx]# echo "multi_port_2" > multi_port_2/index.html

# 测试下
[root@localhost nginx]# systemctl restart nginx
[root@localhost nginx]# curl 172.18.46.151:81
multi_port_1
[root@localhost nginx]# curl 172.18.46.151:82
multi_port_2

方案3-基于多虚拟主机名

这种方式是用的比较多的。

# 其他影响的配置文件备份下
[root@localhost conf.d]# mv multi_host.conf{,.bak}
[root@localhost conf.d]# mv multi_ip.conf{,.bak}

# 编辑配置文件
[root@localhost conf.d]# cp multi_ip.conf multi_host.conf
[root@localhost conf.d]# vim multi_host.conf
[root@localhost conf.d]# cat multi_host.conf
server    {
    listen 80;
    server_name www.linuxpanda.tech;
    root   /usr/share/nginx/multi_host_1;
}
server    {
    listen 80;
    server_name blog.linuxpanda.tech;
    root   /usr/share/nginx/multi_host_2;
}

# 创建主页
[root@localhost conf.d]# cd /usr/share/nginx/
[root@localhost nginx]# ls
html  modules  multi_ip_1  multi_ip_2  multi_port_1  multi_port_2
[root@localhost nginx]# mkdir multi_host_1
[root@localhost nginx]# mkdir multi_host_2
[root@localhost nginx]# echo "multi_host_1" > multi_host_1/index.html
[root@localhost nginx]# echo "multi_host_2" > multi_host_2/index.html

# 测试
虚拟主机需要配合dns解析使用的, 我这里就简单点使用hosts文件解析了。
[root@localhost conf.d]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.46.151 www.linuxpanda.tech blog.linuxpanda.tech

[root@localhost conf.d]# systemctl restart nginx
[root@localhost conf.d]# curl www.linuxpanda.tech
multi_host_1
[root@localhost conf.d]# curl blog.linuxpanda.tech
multi_host_2

 

三、nginx支持https
1、安装nginx

[root@localhost ~]# yum install nginx

2、 配置

[root@localhost conf.d]# cd /etc/pki/tls/certs/
[root@localhost certs]# ls
ca-bundle.crt  ca-bundle.trust.crt  make-dummy-cert  Makefile  renew-dummy-cert
[root@localhost certs]# make www.crt
umask 77 ; \
/usr/bin/openssl genrsa -aes128 2048 > www.key
Generating RSA private key, 2048 bit long modulus
...................................+++
..........................+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
umask 77 ; \
/usr/bin/openssl req -utf8 -new -key www.key -x509 -days 365 -out www.crt
Enter pass phrase for www.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:henan
Locality Name (eg, city) [Default City]:zhenzhou
Organization Name (eg, company) [Default Company Ltd]:linuxpanda.tech
Organizational Unit Name (eg, section) []:opt
Common Name (eg, your name or your server's hostname) []:www.linuxpanda.tech
Email Address []:
[root@localhost certs]# ll
total 20
lrwxrwxrwx. 1 root root   49 Jan 11 01:00 ca-bundle.crt -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
lrwxrwxrwx. 1 root root   55 Jan 11 01:00 ca-bundle.trust.crt -> /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
-rwxr-xr-x. 1 root root  610 Aug  4  2017 make-dummy-cert
-rw-r--r--. 1 root root 2516 Aug  4  2017 Makefile
-rwxr-xr-x. 1 root root  829 Aug  4  2017 renew-dummy-cert
-rw-------  1 root root 1359 Mar 15 18:00 www.crt
-rw-------  1 root root 1766 Mar 15 17:59 www.key
[root@localhost certs]# openssl rsa -in www.key -out www2.key
Enter pass phrase for www.key:
writing RSA key
[root@localhost certs]# ll
total 24
lrwxrwxrwx. 1 root root   49 Jan 11 01:00 ca-bundle.crt -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
lrwxrwxrwx. 1 root root   55 Jan 11 01:00 ca-bundle.trust.crt -> /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
-rwxr-xr-x. 1 root root  610 Aug  4  2017 make-dummy-cert
-rw-r--r--. 1 root root 2516 Aug  4  2017 Makefile
-rwxr-xr-x. 1 root root  829 Aug  4  2017 renew-dummy-cert
-rw-r--r--  1 root root 1675 Mar 15 18:00 www2.key
-rw-------  1 root root 1359 Mar 15 18:00 www.crt
-rw-------  1 root root 1766 Mar 15 17:59 www.key
[root@localhost certs]# mkdir /etc/nginx/conf.d/ssl
[root@localhost certs]# cp www2.key /etc/nginx/conf.d/ssl/www.key
[root@localhost certs]# cp www.crt /etc/nginx/conf.d/ssl/
[root@localhost certs]# cd /etc/nginx/conf.d/
[root@localhost conf.d]# ls
bak  ssl  vhosts.conf
[root@localhost conf.d]# vim vhosts.conf
[root@localhost conf.d]# cat vhosts.conf
server {
    listen 443 ssl;
    server_name www.linuxpanda.tech;
    root /usr/share/nginx/multi_host_1;

    ssl on ;
    ssl_certificate /etc/nginx/conf.d/ssl/www.crt;
    ssl_certificate_key /etc/nginx/conf.d/ssl/www.key;
    ssl_session_cache  shared:sslcache:20m;
    ssl_session_timeout 10m;

}

3、 测试

[root@localhost conf.d]# curl https://www.linuxpanda.tech -k
multi_host_1

 

四、 nginx常用案例

 1、 反向代理http和负载均衡

代理就是中介,那有反向代理就有正向代理,两者的区别是什么嘞?

          正向代理隐藏真实客户端,服务端不知道实际发起请求的客户端.,proxy和client同属一个LAN,对server透明;

          反向代理隐藏真实服务端,客户端不知道实际提供服务的服务端,proxy和server同属一个LAN,对client透明。

基本配置项 

  (1)proxy_pass

             将当前请求反向代理到URL参数指定的服务器上

      (2)proxy_method

            表示转发时的协议方法名

           proxy_method POST;       客户端转发来的GET请求在转发时方法名会改为POST请求

       (3)proxy_redirect

           当上游服务器返回的响应是重定向或者刷新请求(HTTP响应码是301或者302),可以重设HTTP头部的location或refresh

           proxy_redirect    http://location:8000/two/  http://location:8000/noe/

         (4)proxy_next_upstream

           当上游服务器请求出现错误,继续换一台服务器转发请求。     

    error:在与服务器建立连接,向其传递请求或读取响应标头时发生错误;

    timeout:在与服务器建立连接,向其传递请求或读取响应头时发生超时

    invalid_header:服务器返回空响应或无效响应;

    http_500:服务器返回了带有代码500的响应;

    http_502:服务器返回具有代码502的响应;

    HTTP_503:服务器返回具有代码503的响应;

    http_504:服务器返回具有代码504的响应;

    http_403:服务器返回带有代码403的响应;

    http_404:服务器返回具有代码404的响应;

    off:禁用将请求传递到下一个服务器。

         示例:

             #当其中一台返回错误码404,500...等错误时,可以分配到下一台服务器程序继续处理,提高平台访问成功率,多可运用于前台程序负载,设置proxy_next_upstream

        proxy_next_upstream http_500 | http_502 | http_503 | http_504 |http_404;

            #proxy_next_upstream off   关闭向下转发请求

[root@localhost conf.d]# vim vhosts.conf

    upstream backend {
        server 172.18.46.152    weight=5;
        server 172.18.46.153;

    }

    server {
        listen 172.18.46.151:80;
        location / {
            proxy_pass http://backend;
        }
    }

[root@localhost conf.d]# for i in {1..10} ; do curl 172.18.46.151; done;
153
152
152
152
152
152
153
152
152
152

2、 反向代理mysql

stream {
    upstream mysqlsrvs {
    server 192.168.22.2:3306;
    server 192.168.22.3:3306;
    least_conn;
}
    server {
        listen 10.1.0.6:3306;
        proxy_pass mysqlsrvs;
    }
}

3、 动静分离

server {
        listen 80;
        server_name www.linuxpanda.tech.com;
        root /data/web1/;
        location / {
                proxy_pass http://172.18.46.152;
        }
        location ~* \.php$ {
                proxy_pass http://172.18.46.153;
        }
}

4、 防盗链

server {
        server_name www.b.com;
        root /data/web2;
        valid_referers none block server_names *.b.com  b.*  ~\.baidu\.;
        if ($invalid_referer) {
                return 403 http://www.magedu.com/;
        }
}

5、 代理服务器的缓存功能

server {
        listen 80;
        server_name www.linuxpanda.tech;
        root /data/web1/;

        proxy_cache proxycache;
        proxy_cache_key $request_uri;
        proxy_cache_valid 200 302 301 1h;
        proxy_cache_valid any 1m;

        add_header X-Via $server_addr;
        add_header X-Cache $upstream_cache_status;
        add_header X-Accel $server_name;

        location / {
                proxy_pass http://192.168.27.17;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        location ~* \.php$ {
                proxy_pass http://192.168.27.6;
        }
}

 

posted @ 2020-01-05 12:11  谈晓军  阅读(377)  评论(0编辑  收藏  举报