nginx是一个轻量级的WEB服务器及反向代理服务器,由于目前项目服务器thttpd不支持SSL协议,所以需要通过反向代理服务器来支持SSL协议。
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头文件没有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, " " );
hc->x_real_ip = cp;
}
...libhttpd.c 3141行
设置环境变量把X_Real_IP加上
... if (hc->x_real_ip[0] !=