文章目录
一、安装
#需要的tar包:nginx-1.13.8.tar.gz、openssl-1.0.2h.tar.gz
#导入压缩包、解压
$ tar -zxf nginx-1.13.8.tar.gz
$ tar -zxf openssl-1.0.2h.tar.gz
#安装依赖包
$ yum -y install gcc gcc-c++ zlib zlib-devel pcre pcre-devel
#添加nginx服务用户
$ useradd -r -s /sbin/nologin nginx
#编译、安装
$ cd nginx-1.13.8
$ ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-openssl=解压目录/openssl-1.0.2h --with-stream
$ make && make install
#检测配置文件、启动、平滑重启
$ /usr/local/nginx/sbin/nginx -t
$ /usr/local/nginx/sbin/nginx 启动
$ kill -HUP $(cat /user/local/nginx/logs/nginx.pid)
或:pkill -HUP nginx
配置文件结构
$ vim /usr/local/nginx/conf/nginx.conf
..... #全局块,配置影响nginx全局的属性,如用户信息、worker数等
events { #events块,配置nginx与用户的允许同时建立的网络连接数
....
}
http { #http块,配置代理、缓存等参数
.... #http全局块
server { #server块,配置虚拟主机参数,一个http可有多server
....
location [pattern]{ #location块,配置请求路由及对应处理
...
}
location [pattern]{
...
}
}
server { #配置多个server块
....
location [pattern]{
...
}
location [pattern]{
...
}
}
}
二、统计模块
#安装时添加模块选项:--with-http_stub_status_module,nginx内置的状态监控页面,可用于监控nginx的整理访问情况
#主配置文件添加
$ vim /usr/local/nginx/conf/nginx.conf
.... #其他设置
location /nginx_status{
stub_status on;
}
#重启服务
$ /usr/local/nginx/sbin/nginx -t
$ pkill -HUP nginx
-----------------------
页面访问:http://IP/nginx_status
#结果分析:
"Active connections"表示当前的活动连接数;
"server accepts handled requests"表示已经处理的连接信息;
三个数字依次表示已经处理的连接数、成功的TCP握手次数、已处理的请求数
"Reading: 0 Writing: 1 Waiting: 0" 表示正在读取客户端的连接数、响应数据到客户端的数、等待再次请求的连接数
三、访问认证
####基于用户名、密码的验证访问
$ vim /usr/local/nginx/conf/nginx.conf
#在想验证的location下面添加,以根区域为例
location / {
root html;
index index.html index.htm;
#添加下面两行
auth_basic "welcome you here";
auth_basic_user_file /usr/local/nginx/html/a.psd;
}
#创建认证文件
$ cd /usr/local/nginx
$ /usr/local/apache2/bin/htpasswd -c /usr/local/nginx/html/a.psd u1
#重启服务
$ /usr/local/nginx/sbin/nginx -t
$ pkill -HUP nginx
------------
客户机测试:
输入任何网址都会弹出认证窗口
三、虚拟主机(基于域名)
#在主配置文件中,添加不同的server区域
$ vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.new.com;
location / {
index index.html index.htm index.php;
root html/new;
access_log logs/new-access.log;
}
}
server {
listen 80;
server_name www.old.com;
location / {
index index.html index.htm index.php;
root html/old;
access_log logs/old-access.log;
}
}
#新建站点和访问界面、并赋予nginx权限
$ cd /usr/local/nginx/html
$ mkdir old
$ mkdir new
$ echo "new pages~" > new/index.html
$ echo "old pages~" > old/index.html
#重启服务
$ /usr/local/nginx/sbin/nginx -t
$ pkill -HUP nginx
——————————————————————————
客户端测试
$ vim /etc/hosts
IP地址 www.new.com
IP地址 www.old.com
$ curl www.new.com
$ curl www.old.com
四、域名跳转(old -> new)
#基于上面的虚拟主机实验
$ vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.new.com;
location / {
index index.html index.htm index.php;
root html/new;
access_log logs/new-access.log;
}
}
#方法一
server {
listen 80;
#在这写上第二个域名,会实现效果但有警告
server_name www.old.com www.new.com;
location / {
index index.html index.htm index.php;
root html/old;
access_log logs/old-access.log;
}
}
结果没啥变化
如果改上面
#方法二
server {
listen 80;
#在这写上第二个域名,会实现效果但有警告
server_name www.old.com;
location / {
rewrite .* http://www.new.com permanent;
}
}
#重启服务
$ /usr/local/nginx/sbin/nginx -t
$ pkill -HUP nginx
——————————————————————————
客户端测试
$ vim /etc/hosts
$ curl www.new.com
$ curl www.old.com
#此时访问原来的也可以,其网页位置在html根目录
$ curl localhost
两种都是new的网址
五、反向代理
代理服务器(nginx)
#主配置文件对应的location下面添加代理网站proxy_pass
$ vim /usr/local/nginx/conf/nginx.conf
server{
.... #其他配置
location / {
#此处填写真实服务器的IP地址,代理其他主机
#也可填本机其他域名,实现跳转
proxy_pass http://192.168.88.100:80;
}
}
#重启服务
$ /usr/local/nginx/sbin/nginx -t
$ pkill -HUP nginx
真实服务器
#配置任何web服务都可,本例配置apache服务
$ yum -y install httpd
$ echo "pages from real server~" > /var/www/html/index.html
$ systemctl start httpd
测试机
#访问nginx所在机器的IP或域名,出现Apache里的界面内容
五、负载均衡
#主配置文件对应的location下面添加代理网站proxy_pass
$ vim /usr/local/nginx/conf/nginx.conf
#此标签在server标签前添加
upstream hongfu {
#权重越大,访问它的次数就越多
server 192.168.88.100:80 weight=1;
server 192.168.88.200:80 weight=1;
}
server {
listen 80;
server_name www.new.com;
#修改自带的location /的标签,将原内容删除,添加下列两项
location / {
#添加反向代理,代理地址填写upstream声明的名字
proxy_pass http://hongfu;
#重写请求头部,保证网站所有页面都可访问成功
proxy_set_header Host $host;
}
}
#重启服务
$ /usr/local/nginx/sbin/nginx -t
$ pkill -HUP nginx
------------------
配置被代理的真实服务器
#server 192.168.88.100:80
$ yum -y install httpd
$ echo "pages from 88.100~" > /var/www/html/index.html
$ systemctl start httpd
#server 192.168.88.200:80
$ yum -y install httpd
$ echo "pages from 88.200~" > /var/www/html/index.html
$ systemctl start httpd
----------------
客户端测试
#多次请求www.new.com,可以看到得到的数据一次来自server1、一次来自server2
$ vim /etc/hosts
$ curl www.new.com
$ curl www.new.com
六、实现https
#生成证书,默认路径在PREFIX/conf目录下
$ cd /usr/local/nginx/conf
$ openssl genrsa -out server.key 1024
#建立服务器私钥,生成RSA密钥
$ openssl req -new -key server.key -out server.csr
#需要依次输入国家,地区,组织,email。最重要的是有一个common name,可以写你的名字或者域名。如果为了https申请,这个必须和域名吻合,否则会引发浏览器警报。生成的csr文件交给CA签名后形成服务端自己的证书
$ openssl x509 -req -days 365 -sha256 -in server.csr -signkey server.key -out server.crt
#修改主配置文件,修改server端口为443、添加验证配置
vim /usr/local/nginx/conf/nginx.conf
server{
listen 443;
server_name localhost;
ssl on;
ssl_certificate server.crt;
ssl_certificate_key server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1;
ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM; ssl_prefer_server_ciphers on;
}
#重启服务
$ /usr/local/nginx/sbin/nginx -t
$ pkill -HUP nginx
七、跳转(80 -> 443)
#修改主配置文件,修改server端口为443、添加验证配置
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name ${访问的域名};
location / {
rewrite ^(.*)$ https://$host$1 permanent;
}
}
server{
listen 443;
server_name ${访问的域名};
ssl on;
ssl_certificate server.crt;
ssl_certificate_key server.key;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM; ssl_prefer_server_ciphers on;
}
#重启测试
pkill -HUP nginx
#界面访问http的域名自动跳转到对应的https域名
http2
#生成证书,默认路径在PREFIX/conf目录下
$ cd /usr/local/nginx/conf
$ openssl genrsa -out server.key 1024
#建立服务器私钥,生成RSA密钥
$ openssl req -new -key server.key -out server.csr
#需要依次输入国家,地区,组织,email。最重要的是有一个common name,可以写你的名字或者域名。如果为了https申请,这个必须和域名吻合,否则会引发浏览器警报。生成的csr文件交给CA签名后形成服务端自己的证书
$ openssl x509 -req -days 365 -sha256 -in server.csr -signkey server.key -out server.crt
#修改主配置文件,修改server端口为443、添加验证配置
vim /usr/local/nginx/conf/nginx.conf
server{
#listen的值加上ssl、http2
listen 443 ssl http2;
server_name localhost;
ssl on;
ssl_certificate server.crt;
ssl_certificate_key server.key;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM; ssl_prefer_server_ciphers on;
}
#重启服务
$ /usr/local/nginx/sbin/nginx -t
$ pkill -HUP nginx
conf
server{
#listen的值加上ssl、http2
listen 443 ssl http2;
server_name localhost;
ssl on;
ssl_certificate server.crt;
ssl_certificate_key server.key;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM; ssl_prefer_server_ciphers on;
}
#重启服务
$ /usr/local/nginx/sbin/nginx -t
$ pkill -HUP nginx
![在这里插入图片描述](https://img-blog.csdnimg.cn/caddc9ca6d234650ac13caa26615120f.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21hX3diX2ljZXk=,size_16,color_FFFFFF,t_70)