Nginx介绍
nginx是一个轻量级的WEB服务器及反向代理服务器,因为目前项目服务器thttpd不支持SSL协议,所以需要通过反向代理服务器来支持SSL协议。
如何使用Nginx
环境
OS: Ubuntu16.04
WebServer: thttpd
安装
sudo apt-get install nginx
配置
cd /etc/nginx/conf.d
touch server-8080.conf
server-8080.conf内容如下:
server {
listen 8080 ssl; #监听8080端口
ssl_certificate /etc/nginx/conf.d/ssl/server.crt;
ssl_certificate_key /etc/nginx/conf.d/ssl/server.key;
ssl_prefer_server_ciphers on;
keepalive_timeout 60;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
proxy_pass http://0.0.0.0:8888/; #转发到8888端口上
proxy_next_upstream error http_500;
proxy_set_header Accept-Enconding "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;#真实ip地址保存至请求头
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#真实ip地址保存至请求头
proxy_set_header X-Forwarded-Proto $scheme;
add_header Front-End-Https on;
proxy_redirect off;
}
}
证书
ssl协议需要生成证书,配置文件的server.crt和server.key即证书。
sudo openssl req -new -x509 -days 3650 -extensions v3_ca -keyout ca.key -out ca.crt
sudo openssl genrsa -out server.key 2048
sudo openssl req -out server.csr -key server.key -new
sudo openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650
隐藏版本号
为了安全通常把服务器版本隐藏。
cd /etc/nignx
sudo vim nginx.conf
配置如下
http {
...
server_tokens off;
...
}
启动停止
sudo systemctl start|stop|status nginx
thttpd修改
因为thttpd头文件没有X-Real-IP,所以需要把X-Real-IP添加到头文件中。
下载
官网:http://www.acme.com/software/thttpd/
点击Fetch the software,下载thttpd源码。
修改内容
libhttpd.h 148行
httpd_conn结构体增加char* x_real_ip;
...
off_t first_byte_index, last_byte_index;
int keep_alive;
int should_linger;
struct stat sb;
int conn_fd;
char* file_address;
char* x_real_ip; //新增x_real_ip
} httpd_conn;
libhttpd.c 2246行
解析请求头时把X-Real-IP加上
...
else if ( strncasecmp( buf, "X-Real-IP:", 10 ) == 0 )
{
cp = &buf[10];
cp += strspn( cp, " \t" );
hc->x_real_ip = cp;
}
...
libhttpd.c 3141行
设置环境变量把X_Real_IP加上
...
if (hc->x_real_ip[0] != '\0')
envp[envn++] = build_env( "X_Real_IP=%s", hc->x_real_ip );
...
编译
编译后生成thttpd
configure
make