[root@server1 ~]# wget http://nginx.org/download/nginx-1.10.1.tar.gz
[root@server1 ~]# tar zxf nginx-1.10.1.tar.gz
编译前的设置:
在源代码文件中把版本号注释掉,这是为了防止针对特定版本的恶意攻击
[root@server1 ~]# vim /root/nginx-1.10.1/src/core/nginx.h
#define NGINX_VER "nginx"
关闭编译时的调试模式
[root@server1 nginx-1.10.1]# vim auto/cc/gcc
# debug
#CFLAGS="$CFLAGS -g"
解决编译前的依赖性
[root@server1 nginx-1.10.1]# yum install gcc pcre-devel openssl-devel -y
进行配置参数:
[root@server1 nginx-1.10.1]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio
对参数进行解读:
#--prefix=/usr/local/nginx指定安装路径
#--with-http_stub_status_module开启Nginx自带状态检测模块
#--with-http_ssl_module开启https模块,启动 SSL 的支持
#--with-file-aio 开启文件AIO支持
#--with-threads 启用线程池支持
编译和安装:
[root@server1 nginx-1.10.1]# make && make install
做软链接方便调用:
[root@server1 sbin]# ln -s /usr/local/nginx/sbin/nginx /sbin/
创建nginx用户
[root@server1 sbin]# useradd -M -d /usr/local/nginx/ nginx
[root@server1 sbin]# id nginx
uid=500(nginx) gid=500(nginx) groups=500(nginx)
nginx配置文件主要分为4部分:
main(全局设置) main部分设置的指令将影响其他所有设置
server(主机设置)server部分的指令主要用于指定主机和端口
upstream(负载均衡服务器设置)upstream指令主要用于负载均衡,设置后端服务器
location(URL匹配特定位置的设置)部分用于匹配网页位置
server继承main,location继承server,upstream既不会继承其他设置也不会被继承
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
user nginx nginx; ##主模块指令,定义Nginx运行的用户和用户组
worker_processes 1; ##主模块指令,设置nginx的进程数,建议设置为cpu核心数
#worker_cpu_affinity ##此参数设置进程数和CPU做绑定,有效利用资源
#默认是关闭的,可以自行开启,可以通过lscpu查看CPU的核数
#当cpu核心数为2,可以设置为01 10.
#当cpu核心数为4,可以设置为0001 0010 0100 1000.
#error_log logs/error.log; #主模块指令,用来定义全局错误日志文件
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid; 主模块指令,用来指定进程id的存储文件位置
# events指令用来设定nginx工作模式与连接数上限
events {
use epoll; # use是个事件模块指令,用来指定nginx的工作模式
#对于linux系统,epoll工作模式时首选
worker_connections 65535;
#事件模块指令,用于定义nginx每个进程的最大连接数默认是1024
# 进程的最大连接数受linux系统的最大打开文件数限制,
在执行操作系统命令“ulimit -n 65535”后worker_connections的设置才能生效
}
-------------------------以上为全局配置------------------------------
#设定http服务器
http {
include mime.types;
##实现对配置文件所包含的文件设定,可以减少主配置文件的复杂度
default_type application/octet-stream;
##在没有配置环境时,nginx是不予解析的,用浏览器访问就会出现下载窗口
设置日至格式
#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 on;
#开启高效文件传输模式,将tcp_nopush和tcp_nodely两个指令设置为on,用于防止网络阻塞。
tcp_nopush on;
tcp_nodelay on;
#keepalive_timeout 0;
keepalive_timeout 65;
#客户端连接保持活动的超时时间,超过这个时间之后服务器会关闭该链接
gzip on; #开启gzip压缩输出
----------------------以上是http模块设置-------------------
#设定虚拟主机配置
server {
#侦听80端口
listen 80;
#定义使用 www.westos.org访问
server_name www.westos.org;
#定义服务器的默认网站根目录位置
root html;
#设定本虚拟主机的访问日志
access_log logs/nginx.access.log main;
#默认请求
location / {
#定义首页索引文件的名称
index 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;
}
}
}
虚拟主机是将一台服务器主机分成一台台“虚拟”的主机,每台虚拟主机都可以具有独立的域名,具有完整的Intemet服务器功能(WWW、FTP、Email等),同一台主机上的虚拟主机之间是完全独立的。从网站访问者来看,每一台虚拟主机和一台独立的主机完全一样。
[root@server1 logs]# vim /usr/local/nginx/conf/nginx.conf
#虚拟主机 1
server {
listen 80;
#主机名称
server_name www.westos.org;
location / {
#虚拟主机的发布目录
root /www1;
index index.html;
}
}
#虚拟主机 2
server {
listen 80;
server_name www.hello.org;
location / {
root /www2;
index index.html;
}
}
}
[root@server1 logs]# nginx -s reload
建立默认发布目录并修改发布页面
[root@server1 ~]# mkdir /www1
[root@server1 www1]# vim index.html
www.westos.org
[root@server1 ~]# mkdir /www2
[root@server1 www2]# vim index.html
www.hello.org
在客户端添加本地解析:
[root@foundation7 ~]# vim /etc/hosts
172.25.7.1 www.westos.org www.hello.org
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
1.生成证书:
[root@server1 conf]# cd /etc/pki/tls/certs/
[root@server1 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]:westos
Organizational Unit Name (eg, section) []:linux
Common Name (eg, your name or your server's hostname) []:server1
Email Address []:[email protected]
[root@server1 certs]# ll cert.pem
-rw------- 1 root root 3096 Aug 9 10:59 cert.pem
[root@server1 certs]# cp cert.pem /usr/local/nginx/conf/
2.使nginx支持https
# HTTPS server
#
server {
listen 443 ssl;
server_name www.westos.org;
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 /www1;
index index.html index.htm;
}
}
[root@server1 conf]# nginx -s reload
访问www.westos.org ==> https://www.westos.org
server {
listen 80;
server_name www.westos.org;
rewrite ^(.*)$ https://www.westos.org$1 permanent;
location / {
root /www1;
index index.html;
}
}
访问www.westos.org/bbs页面==>http://bbs.westos.org
server {
listen 80;
server_name www.westos.org
rewrite ^/bbs$ http://bbs.westos.org permanent;
location / {
root /www1;
index index.html;
}
}
从www.westos.org/bbs/index.html页面==>http://bbs.westos.org/index.html==>http://bbs.westos.org/index.html
server {
listen 80;
server_name www.westos.org;
rewrite ^/bbs$ http://bbs.westos.org permanent;
rewrite ^/bbs/(.*)$ http://bbs.westos.org/$1 permanent;
location / {
root /www1;
index index.html;
}
}
当访问bbs.westos.org定位到 http://www.westos.org/bbs/
server {
listen 80;
server_name www.westos.org bbs.westos.org;
if ($host = "bbs.westos.org") {
rewrite ^/(.*)$ http://www.westos.org/bbs/$1 permanent;
}
location / {
root /www1;
index index.html;
}
}