admin 管理员组

文章数量: 1184232


2024年1月17日发(作者:python 桌面程序开发)

Linux环境-Nginx配置详解

一. 准备工作

系统:CentOS-6.5

虚拟机:VMware11

1. 工具

1) gcc、gcc-c++、zlib、zlib-devel、、、、、

2) 推荐将需要安装的工具都放在一个文件夹中,解压缩后不要删除;

2. 安装

安装前请将用户切换为root用户。

1) gcc、gcc-c++安装

 yum –y install gcc gcc-c++

Tip: 判断是否已经安装gcc或 gcc-c++

命令:rpm –qa|grep gcc(gcc-c++)

2) zlib、zlib-devel安装

 yum –y install zlib zlib-devel

Tip: 判断是否安装命令同上

3. pcre的安装

 解压缩:tar –zxvf

 配置:./configure –prefix=/usr/local/pcre

 编译:make

1 | 16

Linux环境-Nginx配置详解

 安装:make install

默认安装在/usr/local/pcre

4. openssl的安装

 解压缩:tar –zxvf

 配置:./config

 编译:make

 安装:make install

Tip:在make&make install时请耐心等待,openssl默认安装在/usr/local/ssl

5. nginx的安装

nginx安装前要先安装OpenSSL

 解压缩:tar –zxvf

 配置:./configure

--with-http_stub_status_module

--with-openssl=/home/zhao/openssl-1.0.1j

--with-pcre=/home/zhao/pcre-8.36

--with-http_ssl_module

--with-http_gzip_static_module

Tip:

--with-http_stub_status_module :启动nginx Status功能,用来监控Nginx的当前状态

--with-http_ssl_module:支持SSL

--with-openssl=/home/zhao/openssl-1.0.1j:启动SSL(这里制定源码目录,而不是编译后的安装目录)

--with-pcre=/home/zhao/pcre-8.36:启用正则表达式(这里制定源码目录,而不是编译后的安装目录)

--with-http_gzip_static_module:启用静态压缩

--with-http_memcached_module:启用memcache缓存

2 | 16

Linux环境-Nginx配置详解

--with-http_rewrite_module:启用支持URL重写(需要安装pcre,否则configure时报错)

编译:(编译时间比较长,请耐心等待)

make

安装:

make install

nginx默认安装路径/usr/local/nginx,以下的配置示例都使用该地址。

Tip:

 查看版本:/usr/local/nginx/sbin/nginx -V

二. Nginx的启动、停止、平滑重启

1. 启动

 命令:

/usr/local/nginx/sbin/nginx

2. 停止

 ps命令查找Nginx的主进程号:

ps –ef | grep nginx

图2-2-1

从上图找到master process为49641。

 从容停止:

kill – QUIT 49641

 快速停止:

kill –TERM 49641

 强制停止:

3 | 16

Linux环境-Nginx配置详解

pkill -9 49641

3. 平滑重启

如果改变了Nginx的配置文件,想重启Nginx,重启前要确认Nginx的配置文件的语法是否正确,否则不会加载新的配置文件。例如:

/usr/local/nginx/sbin/nginx –t

如果配置文件不正确,屏幕将提示配置文件第几行出错,如图2-3-1:

图2-3-1

如果配置文件正确,屏幕将提示以下两行信息:

图2-3-2

此时便可平滑重启(两种方式):

 /usr/local/nginx/sbin/nginx –s reload

 kill –HUP nginx主进程号

三. Nginx的虚拟主机配置

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

1. 配置基于IP的虚拟主机

 编辑/etc/

vi /etc/

在文件末尾增加以下内容,然后保存即可,如图3-1-1:

4 | 16

Linux环境-Nginx配置详解

图3-1-1

192.168.220.130、192.168.220.131是虚拟ip,这样可以让服务器重启后,虚拟ip仍然有效。如果重启没有生效,有可能虚拟ip冲突,更换其它虚拟ip重试。

虚拟ipshiyong配置片段如下:

http

{

#第一个虚拟主机

server

{

#监听的端口

listen 80;

#主机名称

server_name ;

#访问日志文件存放路径

access_log logs/;

location /

{

#默认首页文件,顺序从左到右,如果找不到文件,则查找文件为首页文件

index ;

#HTML网页文件存放的目录

root /html/htdocs/;

}

}

#第二个虚拟主机

server

{

#监听的端口

listen 80;

#主机名称

5 | 16

Linux环境-Nginx配置详解

server_name ;

#访问日志文件存放路径

access_log logs/;

location /

{

#默认首页文件,顺序从左到右,如果找不到文件,则查找文件为首页文件

index ;

#HTML网页文件存放的目录

root /html/htdocs/;

}

}

}

四. Nginx与Tomcat的安装、配置

1. JDK和Tomcat的安装

1) JDK安装

 解压:tar –zxvf

 移动:将解压包移动到/usr/local/java mv jdk-1.7.0 /usr/local/java

 编译:make

 安装:make install

2) Tomcat安装

 解压:tar –zxvf

 移动:解压包移动到/usr/local 或重命名tomcat

2. 配置环境变量

编辑vim /etc/profil,配置如图4-2-1

6 | 16

Linux环境-Nginx配置详解

图4-2-1

执行命令使配置生效:

source /etc/profile

3. Nginx与Tomcat的配置

一个完整的配置示例:

#user nobody;

worker_processes 2;

#error_log logs/;

#error_log logs/ notice;

#error_log logs/ info;

pid logs/;

events {

worker_connections 1024;

}

http {

include ;

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/ main;

sendfile on;

tcp_nopush on;

#keepalive_timeout 0;

keepalive_timeout 65;

tcp_nodelay on;

7 | 16

Linux环境-Nginx配置详解

#gzip on;

client_body_buffer_size 512k;

proxy_connect_timeout 5;

proxy_read_timeout 60;

proxy_send_timeout 5;

proxy_buffer_size 16k;

proxy_buffers 4 64k;

proxy_busy_buffers_size 128k;

proxy_temp_file_write_size 128k;

gzip on;

gzip_min_length 1k;

gzip_buffers 4 16k;

gzip_http_version 1.1;

gzip_comp_level 2;

gzip_types text/plain application/x-javascript text/css application/xml;

gzip_vary on;

upstream tomcat_server {

server 127.0.0.1:8080;

}

server

{

listen 80;

server_name 192.168.220.129;

#charset koi8-r;

index ;

root /data0/htdocs/www;

if (-d $request_filename)

{

rewrite ^/(.*)([^/])$ $host/$1$2/ permanent;

}

location ~ .(jsp|jspx|do)?$

{

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $remote_addr;

proxy_pass tomcat_server;

}

location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$

{

expires 30d;

}

location ~ .*.(js|css)?$

8 | 16

Linux环境-Nginx配置详解

}

}

{

}

expires 1h;

五. Nginx HTTP负载均衡配置

Nginx的反向代理负载均衡能够很好地支持虚拟主机,可配置性很强,可以按轮询、IP哈希、URL哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。

1. Nginx反向代理示例

user nobody;

worker_processes 2;

error_log logs/;

pid /usr/local/nginx/;

events {

use epoll;

worker_connections 1024;

}

http {

include ;

default_type application/octet-stream;

server_names_hash_bucket_size 128;

client_header_buffer_size 32k;

large_client_header_buffers 4 32k;

sendfile on;

keepalive_timeout 65;

tcp_nodelay on;

fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

fastcgi_buffer_size 64k;

fastcgi_buffers 4 64k;

fastcgi_busy_buffers_size 128k;

9 | 16

Linux环境-Nginx配置详解

fastcgi_temp_file_write_size 128k;

gzip on;

gzip_min_length 1k;

gzip_buffers 4 16k;

gzip_http_version 1.1;

gzip_comp_level 2;

gzip_types text/plain application/x-javascript text/css application/xml;

gzip_vary on;

#允许客户端请求的最大单个文件字节数

client_max_body_size 300m;

#缓冲区代理缓冲用户端请求的最大字节数,可以理解为先保存到本地再给用户;

client_body_buffer_size 128k;

#跟后端服务器连接的超时时间——发起握手等候相应超时时间

proxy_connect_timeout 600;

#连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理

proxy_read_timeout 600;

#后台服务器数据回传时间_就是在规定时间后端服务器必须传完的所有数据

proxy_send_timeout 600;

#代理请求缓存区_这个缓存区间会保存用户的头信息以供nginx进行规则处理_一般只保存头信息

proxy_buffer_size 16k;

#同上,告诉Nginx保存单个用的几个Buffer 最大用多大空间

proxy_buffers 4 32k;

#如果系统很忙时可以申请更打的proxy_Buffer *2

proxy_busy_buffers_size 64k;

#proxy缓存临时文件的大小

proxy_temp_file_write_size 64k;

#配置了apache服务器组

upstream apache_server_pool{

server 192.168.0.155:80 weight=4 max_fails=2 fail_timeout=30s;

}

#配置了tomcat服务器组

10 | 16

Linux环境-Nginx配置详解

upstream tomcat_server_pool{

server 192.168.0.155:8080 weight=4 max_fails=2 fail_timeout=15s;

server 192.168.1.38:8081 weight=3 max_fails=2 fail_timeout=15s;

}

#第一个虚拟主机,反向代理apache_server_pool这组服务器

server

{

listen 80;

server_name 192.168.220.129;

location /

{

proxy_next_upstream http_502 http_504 error timeout invalid_header;

proxy_pass apache_server_pool;

proxy_set_header Host 192.168.220.129;

proxy_set_header X-Forwarded-For $remote_addr;

}

}

#第二个虚拟主机

server

{

listen 80;

server_name 192.168.220.131

location /manager/

{

proxy_pass tomcat_server_pool;

proxy_set_header Host $host;

}

location /

{

proxy_pass apache_server_pool;

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $remote_addr;

}

}

}

以上配置了apache服务器组tomcat服务器组,例如当访问虚拟机192.168.220.131/时,访问的是php_server_pool,即192.168.0.155:80。当访问 11 | 16

Linux环境-Nginx配置详解

192.168.220.131/manager/,访问的是tomcat_server_pool,即192.168.0.155:8080,因为它的权重高。如果192.168.0.155:8080服务器宕机,请求将转到192.168.1.38:8081。如果192.168.0.155:8080恢复,请求将再次转到本服务。

六. Nginx OpenSSL双向认证

确保OpenSSL的正确安装,然后就可以使用openssl命令了。

1. 服务器端私钥

#openssl genrsa -des3 -out 2048

运行时会提示输入密码,此密码用于加密key文件(参数des3便是指加密算法,当然也可以选用其他你认为安全的算法.),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果觉得不方便,也可以去除这个口令,但一定要采取其他的保护措施!

去除key文件口令的命令:

#openssl rsa -in -out

2. 用生成证书

# openssl req -new -key -out

输入证书请求信息:

说明:

12 | 16

Linux环境-Nginx配置详解

A challenge password []: [可以不输入]

An optional company name []:[可以不输入]

3. 客户端私钥

# openssl genrsa -des3 -out 2048

4. 用生成证书

# openssl req -new -key -out

输入证书请求信息同服务类似,Country Name|Province Name|Locality Name|Unit

Name|hostname(不能和Server端输入相同的主机名)|email|

5. 生成可信任的CA证书

# openssl req -new -x509 -keyout -out

同上,注意这里的hostname的信息不要和以上重复。

 签署证书的准备工作

13 | 16

Linux环境-Nginx配置详解

6. 文件签名

1) 服务端文件签名

# openssl ca -in -out -cert -keyfile

2) 客户端文件签名

# openssl ca -in -out -cert -keyfile

同上,同样需要两次确认。

14 | 16

Linux环境-Nginx配置详解

7. 为证书编码PKCS12

# openssl pkcs12 -export -in -inkey -out

8. Nginx配置

ssl on;

ssl_certificate ssl/;

ssl_certificate_key ssl/;

#ssl_client_certificate ssl/client/ ;

ssl_client_certificate ssl/ ; //CA证书

ssl_verify_client on; //开启客户端双向认证

七. 优化Nginx服务器

八. 控制Nginx如何记录日志

日志在必要的时候还是非常有用的,在具体的生成环境中建议将访问日志关闭。

1. log_format

log_format custom ‘$remote_addr | $remote_user[$time_local]’

‘”$request” $status $body_bytes_sent ’

九. 常见错误

1. 重启SSL报错的问题

 问题:

nginx: [emerg] SSL_CTX_use_PrivateKey_file("/home/www/ssl/") failed (SSL:

error:0906D06C:PEM routines:PEM_read_bio:no start line error:140B0009:SSL

routines:SSL_CTX_use_PrivateKey_file:PEM lib)

 解决:

routines:SSL_CTX_use_PrivateKey_file:PEM lib

15 | 16

Linux环境-Nginx配置详解

16 | 16


本文标签: 文件 配置 服务器 安装 请求